APC is a PHP opcode cache that improves performance on PHP web servers (but your mileage may vary on servers doing shared hosting).

Install instructions

Install using Puppet, or manually:

apt-get install php-apc

Verify that the extension is installed:

ls /usr/lib/php5/20060613+lfs/

Add the extension to php.ini:

homere:/etc/php5/apache/conf.d# echo extension=apc.so > apc.ini
homere:/etc/php5/apache/conf.d# /etc/init.d/apache restart

Monitoring

An apc.php script is in /usr/share/php after install. I copied it to koumbit.org to have an idea of the status of the cache. This led me to further configure it to extract maximum performance from it.

Configuration

The documentation says that we can tune the shm_size to the limit of the shared memory configured on the server. On homere.koumbit.net, this is:

homere:/etc/php5/apache/conf.d# cat /proc/sys/kernel/shmmax
33554432

AKA around 32M. So the default value of 30M is appropriate. However, it seems we can set it as high as we want: I tried 1024M and still had good results. I tried raising the number of segments instead of the size, as it is recommended, but I had this warning:

PHP Warning:  PHP Startup: apc.shm_segments setting ignored in MMAP mode in Unknown on line 0

... so I reverted back to this configuration:

extension=apc.so
apc.ttl=60
apc.shm_size=1024

ttl is to allow the cache to flush some entries after some time. I also tried with 30 seconds, but it would never end up using all the available memory. Now I get stats like this:

Free: 276.8 MBytes (27.0%)       Hits: 85538 (87.9%)
 Used: 747.2 MBytes (73.0%)      Misses: 11729 (12.1%)

Troubleshooting

Warning: Unable to allocate memory for pool

Il y a un bug qui semble être plutot un probleme de configuration ou de taille de la memoire. Certain disent dans le bug qu'il faut retourner à un apc.ttl de "0" (par défaut, voir http://ca3.php.net/manual/en/apc.configuration.php), d'autres qu'il faut augmenter la mémoire. Dans 109800, on a fait un suivi sur le bug et la mise à jour au backport de APC a réglé le problème.

Le problème s'est aussi produit sur hesiode (ou hypnos?) après la mise à jour à PHP 5.3 *et* un upgrade au backport d'APC, donc c'est pas le fix complet. On a essayé d'ajouter apc.mmap_file_mask=/apc.shm.XXXXXX comme sur ceres pour régler le problème. Suivi dans 206880. -- TheAnarcat 2013-04-17 17:51:10

Tuning de la mémoire

Dans 93946, on a réduit la mémoire allouée à APC car elle n'était pas toute utilisée. On veut éviter de prendre trop de mémoire pour APC parce que ça en bouffe sur les autres process.

Voir aussi MémoirePartagée.


CategoryPhp

AlternativePhpCache (last edited 2013-04-18 11:36:54 by TheAnarcat)