2014-07-15 9 views
6

Attualmente abbiamo iniziato a utilizzare HHVM in un ambiente di produzione e finora quasi tutti i risultati sono piuttosto inattivi. La nostra velocità di transazione complessiva è notevolmente migliorata rispetto a PHP-FPM con APC. Quasi tutte le richieste sono al di sotto dei 500ms, tuttavia ogni coppia di richieste (da 5 a 10 circa) comporta un tempo di richiesta compreso tra 2 e 5 secondi.HHVM fastcgi + fluttuazioni delle prestazioni Nginx

La pagina richiesta non sembra fare alcuna differenza e anche richiedere la stessa pagina più e più volte farà scattare questo comportamento all'interno di un paio di richieste.

Ci sono in esecuzione HHVM in modalità server con le seguenti opzioni della riga di comando:

/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 

Stiamo correndo nginx per il server web con queste configurazioni rilevanti (mi dispiace se ho dimenticato qualcosa importand qui).

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; 

Il server ha 128 GB di memoria e 24 core (hyperthreading quindi in realtà 12).

Abbiamo fatto un bel po 'di ricerca su https://github.com/facebook/hhvm/wiki/Runtime-options ma la maggior parte delle opzioni non sono spiegate molto bene quindi non ho idea di cosa facciano e testarle in un ambiente di produzione è un po' spaventoso.

Se qualcuno avesse un problema simile o forse mi indicasse una direzione con alcune delle opzioni HHVM, sarei molto grato.

versione

Il HHVM utilizzato è da http://www.hop5.in/yum/el6/

HipHop VM 3.0.1 (rel) 
Compiler: 
Repo schema: e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 

E la la /etc/hhvm/config.hdf

Log { 
    Level = Warning 
    AlwaysLogUnhandledExceptions = true 
    RuntimeErrorReportingLevel = 8191 
} 

MySQL { 
    TypedResults = false 
} 

Stiamo usando supervisord per iniziare HHVM ecco la configurazione supervisore come wel :

[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 

C'è un php.ini /etc/hhvm/php.ini ma il contenuto è vuoto. Anche le pagine provate tutte fanno un po 'di connettività al database, ma di solito è molto minimale. Per un'immagine completa anche il my.cnf. La versione di MySQL è utilizzato 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 

versione di MySQL:

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 
+0

Ho alcune esperienze con HHVM + Hack Lang. Potresti mostrarci il tuo hhvm server.ini + php.ini? Lo stesso per NGINX + FastCGI. Quale versione di hhvm usi? La richiesta esegue sth. o connettersi a un database? – Tyralcori

risposta

2

così siamo riusciti a capirlo, è stato un problema combinato di HHVM e l'applicazione che stiamo usando.

HHVM produce un bel po 'di perf - ****. File di mappe e là dove anche un mucchio di file sess_. In totale là dove oltre 8 milioni di file nella directory/tmp. Dopo aver rimosso i nostri problemi sono andati via e quasi tutte le nostre richieste sono migliorate significativamente in termini di prestazioni. Anche i file di sessione non dovrebbero essere stati lì in primo luogo, ma questo era un problema che è già stato risolto.

Ora abbiamo disabilitato la generazione dei file perf-aggiungendo -vEval.PerfPidMap ai nostri argomenti di avvio.

+0

Wow, ho appena cercato in/tmp e ci sono milioni di file sess_. Perché dici che non dovrebbero esserci e come hai "risolto" il problema di HHVM generandoli? – pjv

+0

La quantità estrema di file di sessione era dovuta a un bug in HHVM. Vedi https://github.com/facebook/hhvm/issues/3747#issuecomment-59141301. C'è una correzione ora ma abbiamo appena aggiunto un cronjob per cancellare i vecchi file di sessione. – Fraak

+0

Grazie, ho scritto un post qui su come ho affrontato questo: http://community.rtcamp.com/t/hhvm-session-files/3639/1 – pjv

Problemi correlati