Migliorare le performance di WordPress con Apache MPM Worker

Da un paio di settimane per uno dei miei server di test ho aggiornato Apache2 MPM portandolo dalla versione “Prefork” alla “Worker”. Ho deciso di fare questa prova dopo avere letto alcuni post interessanti che descrivevano un notevole miglioramento nelle performance di WordPress dopo avere effettuato questo tipo di aggiornamento. Il periodo di prova ha confermato tutto: sul server in questione – dove gira una non più fiammante “Lenny” – ho potuto registrare una netta riduzione del load average durante l’esecuzione forzata di un elevato numero di processi PHP5 in FastCGI generati attraverso chiamate concorrenti a WordPress, una sorta di banchwork casalingo ottenuto con semplici script PHP autoprodotti.

Spiego rapidamente in che cosa consista la differenza tra le due versioni di Apache, almeno per gli aspetti che interessano poi le performance di WordPress: mentre la versione normalmente considerata standard – detta “Prefork” – utilizza un Multi-Processing Module basato sui processi, la versione “Worker” utilizza invece i thread. Il modello “Prefork” gestisce un processo per ogni connessione, mentre il modello “Worker” gestisce un processo per ogni gruppo di thread ed un thread per ogni connessione. In questo modo, la versione “Worker” di Apache2 tende ad utilizzare meno memoria e a distribuire meglio le chiamate al processore indirizzandole al maggior numero di core – anche per questo motivo si tende a considerare “Worker” più adatta a server multicore, nel senso che è su quelli che si possono misurare i miglioramenti di performance più significativi.

Attenzione però, lo scotto da pagare può essere notevolmente scoraggiante per moltissimi di voi: PHP5 potrà girare solo in modalità mod_fcgid mentre si dovrà per forza rinunciare al mod_php5 di Apache! Pensateci bene quindi prima di effettuare questo tipo di operazione.

Per come sono solito a configurare i miei server, il passaggio da “Prefork” a “Worker” nel mio caso ha richiesto un solo comando:

aptitude install apache2-mpm-worker

Aptitude mi ha avvisato subito che l’installazione di questo pacchetto avrebbe determinato la rimozione di libapache2-mod-php5:

# aptitude install apache2-mpm-worker
Lettura della lista dei pacchetti in corso... Fatto
Generazione dell'albero delle dipendenze in corso
Lettura informazioni sullo stato... Fatto
Lettura delle informazioni sullo stato esteso
Inizializzazione dello stato dei pacchetti... Fatto
Lettura delle descrizioni dei task... Fatto
I seguenti pacchetti sono DIFETTOSI:
libapache2-mod-php5
I seguenti pacchetti NUOVI (NEW) saranno installati:
apache2-mpm-worker
I seguenti pacchetti saranno RIMOSSI:
apache2-mpm-prefork{a}
0 pacchetti aggiornati, 1 installati, 1 da rimuovere e 0 non aggiornati.
È necessario prelevare 0B/242kB di archivi. Dopo l'estrazione, verranno occupati 8192B.
I seguenti pacchetti hanno dipendenze non soddisfatte:
libapache2-mod-php5: Dipende: apache2-mpm-prefork (> 2.0.52) ma non è installabile o
apache2-mpm-itk ma non è installabile
Le seguenti azioni permetteranno di soddisfare queste dipendenze:
Rimuovere i seguenti pacchetti:
libapache2-mod-php5
Il punteggio è 119

Se si decide di procedere – ripeto: rinunciando definitivamente a mod_PHP5! – l’installazione avverrà in pochi secondi, con il solito riavvio finale di apache mediante:

/etc/init.d/apache2 restart

Da questo momento in avanti non resta che godersi le straordinarie prestazioni di Apache2 MPM “Worker”.

Condivido
1 Commenti
  • Nicolas Gutierrez
    Febbraio 14, 2011

    Figo… Grazie per la guida

Leave a comment