Quale cacher opcode PHP dovrei usare per migliorare le performance?

Sto cercando di migliorare le performance sotto carico elevato e vorrei implementare il caching opcode. Quale dei seguenti dovrei usare?

  • APC – Guida all'installazione
  • eAccelerator – Guida all'installazione
  • XCache – Guida all'installazione

Sono anche aperto a tutte le altre alternative che sono scivolate sotto il mio radar.

Attualmente in esecuzione su un supporto Debian Etch con Apache 2 e PHP 5.2

[Aggiornamento 1]

Aggiunti collegamenti di installazione HowtoForge

[Aggiornamento 2]

Sulla base delle risposte e dei feedback forniti, ho testato tutte e 3 le implementazioni utilizzando il seguente piano di test Apache JMeter sulla mia applicazione:

  • Accesso
  • Accedi alla Home Page

Con 50 connessioni simultanee, i risultati sono i seguenti:

Nessuna memorizzazione nella cache di Opcode
Nessuna memorizzazione nella cache di Opcode

APC
APC

eAccelerator
eAccelerator

XCache
XCache

Grafico delle performance (più piccolo è meglio)
Grafico delle prestazioni

Dai risultati sopra riportti, eAccelerator ha un leggero vantaggio in termini di performance rispetto a APC e XCache. Tuttavia, ciò che conta di più dai dati sopra riportti è che qualsiasi tipo di memorizzazione nella cache del codice operativo offre un enorme incremento delle performance.

Ho deciso di utilizzare APC per i seguenti 2 motivi:

  • Il pacchetto è disponibile nel repository ufficiale Debian
  • Pannello di controllo più funzionale

Per riassumere la mia esperienza:

Facilità di installazione: APC> eAccelerator> XCache
Prestazioni: eAccelerator> APC, XCache
Pannello di controllo: APC> XCache> eAccelerator

Penso che la risposta potrebbe dipendere dal tipo di applicazioni web che stai utilizzando. Ho dovuto prendere questa decisione io stesso due anni fa e non ho potuto decidere tra Zend Optimizer e eAccelerator.

Per prendere una decisione, ho usato ab (apache bench) per testare il server, e ho testato le tre combinazioni (zend, eaccelerator, entrambe funzionanti) e ho dimostrato che eAccelerator da solo ha dato le migliori performance.

Se hai il lusso del tempo, ti consiglio di fare test simili tu stesso e prendere la decisione in base ai risultati.

Io uso APC perché è stato facile da installare in Windows e sto sviluppando su WAMP.

L'integrazione di APC in PHP6 è stata discussa qui: http://www.php.net/~derick/meeting-notes.html#add-an-opcode-cache-to-the-distribution-apc

E ci sono indicazioni sull'installazione di APC su Debian Etch qui: http://www.howtoforge.com/apc-php5-apache2-debian-etch

Ho eseguito diversi benchmark con eAcclerator, APC, XCache e Zend Optimizer (anche se Zend è un ottimizzatore, non una cache).

Risultati dei benchmark http://blogs.interdose.com/dominik/wp-content/uploads/2008/04/opcode_wordpress.png

Risultato: eAccelerator è il più veloce (in tutti i test), seguito da XCache e APC. (Quello nel diagramma è il numero di secondi per call una home page di WordPress 10.000 volte).

Zend Optimizer ha reso tutto più lento (!).

Non posso dirlo con certezza, ma il luogo in cui lavoro ora sta guardando APC e eAccelerator. Tuttavia, questo potrebbe influire su di te: APC sarà integrato in una futura versione di PHP (grazie a Ed Haber per il collegamento).

Ho avuto un buon successo con eAccelerator (il miglioramento della velocità con nessun carico è notevole) ma XCache sembra anche piuttosto promettente. Tuttavia, è ansible eseguire alcune prove con ciascuna di esse, la tua applicazione potrebbe scalare in modo diverso su ciascuna di esse.

Sto usando XCache da più di un anno senza problemi.

Ho provato a passare a eAccelerator, ma ho finito con un sacco di errori di segmentazione (è less indulgente di errori). Il principale vantaggio di eAccelerator è che non è solo una cache di opcode, ma anche un ottimizzatore.

Dovresti testare completamente la tua applicazione con ognuna di esse per assicurarti che non ci siano problemi, quindi userei apachebench per testarlo sotto carico.

Questi componenti aggiuntivi hanno introdotto storicamente molti bug strani da rintracciare. Questi bug possono causare comportmenti incoerenti che non possono essere diagnosticati facilmente perché dipende dallo stato della cache.

Quindi direi:

  1. Non usare nessuno dei precedenti. Acquista invece più stagno, è un modo più affidabile (esente da errori) per aumentare le performance. O
  2. Vai con quello di cui sopra è il più robusto, dopo aver testato i pantaloni della vostra applicazione.

Ma direi:

  1. Assicurati che l'analisi del codice sia DAVVERO che sta causando problemi di performance analizzando la tua applicazione. Penso che sia estremamente probabile che non lo sia – nel qual caso sprechi il tuo tempo (in realtà, usando il tuo tempo in modo negativo in modo produttivo) installando uno di essi.