eAccelerator è un’estensione gratuita ed open source per PHP che si occupa di effettuare un lavoro di accelerazione, ottimizzazione e di cache sui vostri script scritti per l’appunto in PHP. I benefici di usare eAccelerator sono dimostrati da infiniti benchmark presenti su Internet.

Sul server dove è residente www.bucchianico.net, ospitato da Sofitek e gestito tramite Kubigo, c’è una installazione LAMP e, prima di aggiungere eAccelerator al gia possente sistema, facciamo un test con Apache Benchmark (ab):


ab -n1000 http://www.bucchianico.net/

Dopo un pò avremo i risultati:


Time taken for tests: 670.692849 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 29338000 bytes
HTML transferred: 29006000 bytes
Requests per second: 1.49 [#/sec] (mean)
Time per request: 670.693 [ms] (mean)
Time per request: 670.693 [ms] (mean, across all concurrent requests)
Transfer rate: 42.72 [Kbytes/sec] received

Bene, adesso installiamo eAccelerator e vediamo cosa succede.
Per poter compilare eAccelerator abbiamo bisogno di php5-dev e build-essential, quindi li installiamo:

apt-get install build-essential php5-dev

Scarichiamo i sorgenti di eAccelerator in /usr/local/src/:

wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2

Apriamo il pacchetto compresso:

tar xvfj eaccelerator-0.9.5.3.tar.bz2

Una volta entrati nella directory appena creata, compiliamo:

cd eaccelerator-0.9.5.3
phpize
./configure
make
make install

Se tutto è andato a buon fine abbiamo quesi finito. Adesso non resta che creare il file .ini che Apache carica insieme alla configurazione di PHP5.

La directory dove creare il file è /etc/php5/conf.d/, quindi:

vi /etc/php5/conf.d/eaccelerator.ini

Al cui interno scriviamo:

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Queste impostazioni sono tratte da http://www.eaccelerator.net/wiki/Settings e consiglio vivamente di visitare tale pagina per meglio configurare eAccelerator in base alle proprie esigenze.

Salvato il file, è necessario creare la directory specificata in eaccelerator.cache_dir e darle i permessi giusti:

mkdir -p /var/cache/eaccelerator
chmod 0777 /var/cache/eaccelerator

Riavviamo Apache:

/etc/init.d/apache2 restart

Adesso se puntiamo il nostro browser sul server con eAccelerator, precisamente ad una pagina PHP che ha questo codice al suo interno:


<?php
phpinfo();
?>

Se, all’interno di tale pagina, cercando “eAccelerator”, è presente la relativa sezione,  abbiamo finito!:)

Adesso riproviamo ad eseguire il test:

ab -n1000 http://www.bucchianico.net/

Ecco i miei risultati:

Time taken for tests: 576.975449 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 29338000 bytes
HTML transferred: 29006000 bytes
Requests per second: 1.73 [#/sec] (mean)
Time per request: 576.975 [ms] (mean)
Time per request: 576.975 [ms] (mean, across all concurrent requests)
Transfer rate: 49.66 [Kbytes/sec] received

Il test è stato completato in 576 secondi rispetto ai 670 di prima e le richieste al secondo sono passate da 1.49 a 1,73: niente male, ma i benefici si hanno con un test che simula richieste concorrenti:


ab -n1000 -c100 http://www.bucchianico.net/

Ecco i risultati SENZA eAccelerator attivo:

Concurrency Level: 100
Time taken for tests: 219.25691 seconds
Complete requests: 1000
Failed requests: 7
(Connect: 0, Length: 7, Exceptions: 0)
Write errors: 0
Non-2xx responses: 7
Total transferred: 29137982 bytes
HTML transferred: 28805562 bytes
Requests per second: 4.57 [#/sec] (mean)
Time per request: 21902.570 [ms] (mean)
Time per request: 219.026 [ms] (mean, across all concurrent requests)
Transfer rate: 129.92 [Kbytes/sec] received

Invece con eAccelerator:

Concurrency Level: 100
Time taken for tests: 134.254046 seconds
Complete requests: 1000
Failed requests: 7
(Connect: 0, Length: 7, Exceptions: 0)
Write errors: 0
Non-2xx responses: 7
Total transferred: 29150942 bytes
HTML transferred: 28818190 bytes
Requests per second: 7.45 [#/sec] (mean)
Time per request: 13425.404 [ms] (mean)
Time per request: 134.254 [ms] (mean, across all concurrent requests)
Transfer rate: 212.04 [Kbytes/sec] received

Beh penso che si commentino da soli…

Bookmark and Share