2014-04-30 19 views
27

Ho un'istanza di EC2 m3.xlarge che ho aggiornato a PHP 5.5.11 oggi.APC -> APCu/OPCache, scarso rendimento

Con questo aggiornamento, ha sovrascritto php55-pecl-apc con php55-pecl-apcu.

Dopo aver letto e la sperimentazione, la mia comprensione è che APC è stato sostituito con OPCache, ad eccezione di un negozio chiave di valore che può essere portato indietro con APCu.

Dopo aver modificato la configurazione su qualcosa che sembra ragionevole, l'utilizzo di Wordpress durante l'accesso è ora terribilmente lento, almeno 300-900 ms (il front-end è memorizzato nella cache tramite vernice e funziona perfettamente ... ma quando sei usando l'admin è deliberatamente non memorizzato nella cache e lento come il peccato).

Ho eseguito una serie di benchmark durante l'aggiornamento, con una piccola dimensione del campione per ogni passaggio. Mentre andavo avanti, peggiorava sempre di peggio.

  • APC (prima dell'aggiornamento) -->
  • OPCache + senza APCu -->
  • OPCache + APCu + WP Plugin per APCu

In questo momento sto solo uscire con OPCache, e non APCu.

  1. Come posso ottenere la stessa prestazione? Ho amato l'interfaccia di amministrazione, ho amato quanto fosse veloce. Onestamente non vedo come questo sia un miglioramento, è davvero deprimente ... a meno che non ci sia una super biblioteca là fuori che non ne sono a conoscenza. Non è certamente quello che ho, o forse non è configurato bene.
  2. Supponendo che la risposta al n. 1 sia "hai configurato come palle", ti dispiacerebbe dare un'occhiata a questo e vedere se questo è ragionevole?

Per il mio setup sto usando l'ultimo wordpress, alcuni plugin di grandi dimensioni ma non riesco a toglierli perché sono importanti. Per fortuna la vernice si prende cura della maggior parte del lavoro. Ho 4 core, 16 GB di memoria, ~ 10k file nella mia radice del sito web. Non ho nemmeno app hardcore o altro che wordpress, è un setup abbastanza vanigliato. Penso che sia per cose che potrebbero aiutare.

Config:

zend_extension=opcache.so 
opcache.enable=1 
opcache.enable_cli=0 
opcache.memory_consumption=128 
opcache.interned_strings_buffer=8 
opcache.max_accelerated_files=10000 
opcache.max_wasted_percentage=5 
opcache.use_cwd=1 
opcache.validate_timestamps=1 
opcache.revalidate_freq=0 
opcache.revalidate_path=0 
opcache.save_comments=0 
opcache.load_comments=0 
opcache.fast_shutdown=1 
opcache.enable_file_override=0 
opcache.optimization_level=0xffffffff 
opcache.inherited_hack=1 
opcache.dups_fix=0 
opcache.blacklist_filename=/etc/php-5.5.d/opcache*.blacklist 
opcache.max_file_size=2M 
opcache.consistency_checks=1 
opcache.force_restart_timeout=180 
opcache.error_log=/var/log/php-fpm/5.5/opcache.log 
opcache.log_verbosity_level=1 
opcache.preferred_memory_model= 
opcache.protect_memory=0 
+0

Sei sicuro che OPCache sia effettivamente caricato e attivo? Crea un file 'testopcache.php' con' 'dentro e prova ad accedervi, dovrebbe dirti se OPCache sta funzionando. Prova anche ad aumentare 'opcache.max_file_size' in' 5M' o anche più. –

+0

L'ho aumentato a 10M. È sicuramente in esecuzione, vedo un'enorme discarica. – Tallboy

+0

Puoi eseguire il backup della tua attuale installazione e provare a rimuovere questi 'pochi grandi plug-in? E vedere se questo cambia qualcosa? –

risposta

15

In questo momento si sta verificando ogni file su ogni richiesta di modifiche, che probabilmente non è ciò che si desidera in un sistema di produzione.

Io di solito basta disattivarlo (ricordarsi di riavviare il server web dopo aver apportato le modifiche):

opcache.validate_timestamps=0 

In alternativa, si può provare a impostare la frequenza a qualcosa di diverso da 0 e tenerlo abilitato:

opcache.validate_timestamps=1 
opcache.revalidate_freq=300 

Questo dovrebbe teoricamente solo verificare le modifiche ogni 5 minuti.

5

Dal RFC che è stato responsabile per la produzione OPCache integrato in PHP:

APC può recuperare la memoria dei vecchi script invalidata. APC utilizza un gestore di memoria e può recuperare la memoria associata a uno script che non è più in uso; Optimizer + funziona in modo diverso e contrassegna tale memoria come "sporca", ma mai effettivamente la recupera. Quando la percentuale di sporcizia sale sopra una soglia configurabile, Optimizer + si riavvia da solo. Nota che questo comportamento ha sia vantaggi di stabilità che svantaggi.

La mia ipotesi è che si stia toccando la soglia che attiva il riavvio della cache dell'opcode.

Riferimento: https://wiki.php.net/rfc/optimizerplus#advantages_of_apc_over_optimizer

7

Hai anche

opcache.consistency_checks=1 

che secondo la documentazione dice rallenta le prestazioni. Spegnilo.

opcache.consistency_checks integer

Se diverso da zero, OPcache verificherà la cache checksum ogni N richieste, dove N è il valore di questa direttiva di configurazione. Questo dovrebbe essere abilitato solo durante il debug, poiché comprometterebbe le prestazioni.