Tout d'abord pour apprécier les bienfaits de APC de je vous conseille de lancer un petit benchmark pour pouvoir comparer avant après. Pour cela j'utilise apachebench :
root@monrps:~# ab -n 1000 -c30 -H "Accept-Encoding: gzip" http://dev.petitchevalroux.net/index.html
Requests per second: 202.56 [#/sec] (mean)
Time per request: 148.105 [ms] (mean)
Time per request: 4.937 [ms] (mean, across all concurrent requests)
On relance sans la compression gz :
root@monrps:~# ab -n 1000 -c30 http://dev.petitchevalroux.net/index.html
Requests per second: 172.74 [#/sec] (mean)
Time per request: 173.672 [ms] (mean)
Time per request: 5.789 [ms] (mean, across all concurrent requests)
Je tiens à préciser que mon fichier index.html est rendu par php.
Ce benchmark nous permettra de comparer les performances obtenues une fois APC installé.
On install pecl qui fait parti du paquet php-pear et php5-dev parce que pecl en a besoin :
root@monrps:~# aptitude install php5-dev php-pear
Maintenant on install apc en utilisant pecl :
root@monrps:~# pecl install apc
Bon là ça se corse APC vous demande un truc qui parle d'APX apache je sais pas quoi. Personnellement j'ai répondu non car j'utilise lighty, je suppose que pour les utilisateurs d'apache il faut répondre oui.
Passons la jouissance de la compilation qui fonctionne ...
Maintenant on vous dit d'ajouter dans votre php.ini :
extension=apc.so
Personnellement j'aime bien la nouvelle configuration modulaire de php donc je l'utilise en créant un fichier apc.ini dans conf.d et j'y ajoute le chargement de l'extension apc (extension=apc.so).
Pour les gens qui utilisent apache :
root@monrps:~# vi /etc/php5/apache2/conf.d/apc.ini
Pour les gens qui utilisent lighttpd :
root@monrps:~# vi /etc/php5/cgi/apc.ini
On redémarre son serveur http :
root@monrps:~# vi /etc/init.d/apache2 restart
Ou
root@monrps:~# vi /etc/init.d/lighttpd restart
Ensuite il faut copier le fichier apc.php dans votre document root (pour le rendre accessible depuis le serveur web) pour avoir les statistiques d'utilisation d'apc :
root@monrps:~# cp /usr/share/php/apc.php /votre/répertoire/accessible/apc.php
Ensuite on modifie le script apc pour changer utilisateur et mot de passe :
root@monrps:~# vi /votre/répertoire/accessible/apc.php
Les lignes ressemblent à ça :
defaults('ADMIN_USERNAME','toto');
defaults('ADMIN_PASSWORD','faitlavaiselle');
Maintenant vous pouvez vérifier que APC fonctionne et appeler le fichier apc.php depuis votre navigateur.
Les graphiques les plus importants sont les suivants :
Vérifiez de temps à autres qu'il reste de la mémoire pour APC et que le taux de hit (appel caché) et supérieur au taux de miss (appel non caché).
Et le benchmark final avec gz :
root@monrps:~# ab -n 1000 -c30 -H "Accept-Encoding: gzip" http://dev.petitchevalroux.net/index.html
Requests per second: 467.40 [#/sec] (mean)
Time per request: 64.185 [ms] (mean)
Time per request: 2.139 [ms] (mean, across all concurrent requests)
Sans gz :
root@monrps:~# ab -n 1000 -c30 http://dev.petitchevalroux.net/index.html
Requests per second: 355.44 [#/sec] (mean)
Time per request: 84.403 [ms] (mean)
Time per request: 2.813 [ms] (mean, across all concurrent requests)
En calculant le gain de performance avec le nombre de requêtes par seconde on obtient un gain de performance de 467/202 = 2.30 - 1 = 130% pour le gz et de 355/172 = 2.06 -1 = 106% pour les appels non compressés.
Conclusion : J'adore APC