В настоящее время мы начали использовать HHVM в производственной среде, и на данный момент почти все результаты впечатляют. Наша общая скорость транзакций значительно улучшилась по сравнению с PHP-FPM с APC. Почти все запросы занимают менее 500 мс, однако каждая пара запросов (от 5 до 10 или около того) приводит к времени запроса от 2 до даже 5 секунд.
Запрошенная страница, похоже, не имеет никакого значения, а также повторный запрос одной и той же страницы вызовет такое поведение в течение нескольких запросов.
Мы запускаем HHVM в режиме сервера со следующими параметрами командной строки:
/usr/bin/hhvm --mode server -vServer.Type=fastcgi -vServer.FileSocket=/usr/local/php55/sockets/admin.sock -vPidFile=/var/run/hhvm/admin.pid -vEval.Jit=true -vServer.ThreadCount=24 -vServer.APC.EnableApc=true
Мы используем nginx для веб-сервера с этими соответствующими конфигурациями (извините, если я забыл что-то важное здесь).
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_read_timeout 240;
fastcgi_intercept_errors on;
На сервере 128 ГБ памяти и 24 ядра (гиперпоточность, так что фактически 12).
Мы немного поискали на https://github.com/facebook/hhvm/wiki/Runtime-options однако большинство опций не очень хорошо объяснены, поэтому я понятия не имею, что они делают, и тестировать их в производственной среде немного страшно.
Если бы у кого-нибудь здесь была похожая проблема или, возможно, он мог бы указать мне направление с некоторыми вариантами HHVM, я был бы очень благодарен.
Используемая версия HHVM взята из http://www.hop5.in/yum/el6/.
HipHop VM 3.0.1 (rel)
Compiler:
Repo schema: e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
И файл /etc/hhvm/config.hdf
Log {
Level = Warning
AlwaysLogUnhandledExceptions = true
RuntimeErrorReportingLevel = 8191
}
MySQL {
TypedResults = false
}
Мы используем супервизор для запуска HHVM, так что здесь также конфигурация супервизора:
[program:hhvm]
stopasgroup=true
killasgroup=true
command=/usr/bin/hhvm --mode server -vServer.Type=fastcgi -vServer.FileSocket=/usr/local/php55/sockets/admin.sock -vPidFile=/var/run/hhvm/admin.pid -vEval.Jit=true -vServer.ThreadCount=24 -vServer.APC.EnableApc=true
user=admin
stdout_logfile=/var/log/hhvm/admin.log
stderr_logfile=/var/log/hhvm/admin.error.log
directory=/home/admin
umask=000
В файле /etc/hhvm/php.ini есть файл php.ini, но его содержимое пусто. Кроме того, все страницы пытались подключиться к базе данных, но обычно это минимально. Для полной картины также файл my.cnf. Используемая версия mysql - percona
[mysql]
# CLIENT #
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
# GENERAL #
user = mysql
default-storage-engine = InnoDB
socket = /var/lib/mysql/mysql.sock
pid-file = /var/lib/mysql/mysql.pid
[mysqld]
# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP
# SAFETY #
max-allowed-packet = 128M
max-connect-errors = 1000000
# DATA STORAGE #
datadir = /var/lib/mysql/
# BINARY LOGGING #
log-bin = /var/lib/mysql/mysql-bin
expire-logs-days = 14
sync-binlog = 1
# CACHES AND LIMITS #
tmp-table-size = 128M
max-heap-table-size = 256M
query-cache-size = 10G
max-connections = 1000
thread-cache-size = 100
open-files-limit = 65535
table-definition-cache = 4096
table-open-cache = 4000
join-buffer-size = 1M
# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 512M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = 73G
# LOGGING #
log-error = /var/lib/mysql/mysql-error.log
log-queries-not-using-indexes = 1
slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log
Версия майкл:
innodb_version 5.6.17-65.0
protocol_version 10
slave_type_conversions
version 5.6.17-65.0-56-log
version_comment Percona Server (GPL), Release 65.0, Revision 587
version_compile_machine x86_64
version_compile_os Linux