Uno degli errori che spesso si fanno nell’installazione di un server con configurazione classica Apache + PHP e MySql è quello di sottovalutare l’impegno di CPU che fa PHP, soprattutto nelle sue ultime versioni, (la 5.3 per esempio) il consumo di CPU è salito di parecchio soprattutto se si hanno molti utenti simultanei.
Per un sito con 50 o 60 utenti concorrenti non c’è nessun problema, supponendo di avere un hardware decente, i problemi veri nascono quando si hanno dai 200 ai 300 utenti simultanei.
In questa guida voglio installare un “accelleratore di php” e poi fare un paio di considerazioni su cosa vuol dire 300 utenti concorrenti.
L’accelleratore php che ho scelto per ubuntu è APC che sicuramente non sarà come l’engine di Zend ma assolve onorevolmente al suo dovere. Trovate una serie di comandi php per gestire al meglio la cache di APC a questa pagina: http://php.net/manual/en/book.apc.php
Prendiamo una shell di Ubuntu e digitiamo quanto segue:
user@server:/directory/$ sudo apt-get install php-apc
Dopo averlo scaricato il sistema operativo lo installerà, ma per renderlo attivo si deve riavviare il demone di apache, quindi digitiamo sulla shell quanto segue:
user@server:/directory/$ sudo /etc/init.d/apache2 restart
A questo punto APC sarà attivo, per verificare digitiamo in shell il seguente comando:
user@server:/directory/$ php -r ‘phpinfo();’ | grep ‘apc’
apc
MMAP File Mask => /tmp/apc.s5jA6w
apc.cache_by_default => On => On
apc.coredump_unmap => Off => Off
apc.enable_cli => On => On
apc.enabled => On => On
Ora passiamo al Memcached, parlavo prima di sessioni simultanee, ovviamente ogni sessione si porta dietro una mole di dati che negli anni è venuta a crescere in modo smisurato, analizziamo una sola sessione. una sessione su wordpress con un numero esiguo di plugins installati lancia dalle 20 alle 30 query sul database, queste sessione ed il relativo lock file vengono scritti in nativamente da Apache su disco, se noi spostiamo questi dati in memoria, l’accesso sarà molto più veloce.
Memoria batte disco …. questo sempre quando si parla di velocità di accesso ai dati.
Ecco quindi che memcached si occupa di salvare queste informazioni in una piccola porzione di ram (di default 64 Mb) e con un array salverà tutte queste sessioni.
Passiamo all’installazione su un sistema Ubuntu.
user@server:/directory/$ sudo apt-get install memcached
user@server:/directory/$ /etc/init.d/memcached start
ora il programma è attivo. Andiamo a vedere su che porta si è installato:
user@server:/directory/$ netstat -tap | grep memcached
tcp 0 0 *:11211 *:* LISTEN 3053/memcached
Installiamo quindi il modulo php di memcached:
user@server:/directory/$ sudo apt-get install php5-memcache
lo troviamo quindi sulla porta tcp 11211 ora basta dire a PHP di gestire le sessioni con un path particolare, andiamo quindi ad editare il file /etc/php5/apache2/php.ini. Andiamo a sostituire i seguenti comandi:
session.save_handler = files
;session.save_path =
con questi:
session.save_handler = memcache
session.save_path = “tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15″
Ovviamente ora dobbiamo riavviare il demone di Apache.
user@server:/directory/$ /etc/init.d/apache2 restart
Sicuramente non sarà la soluzione definitiva a tutti i vostri problemi di performance, ma sicuramente aiuta il vostro server a sopportare meglio un numero di sessioni simultanee maggiore.
Enjoy it.