Je sers les pages Wordpress via nginx/PHP5-FPM en utilisant la mise en cache APC (via le plugin W3 Total Cache). Nginx communique avec PHP-FPM via des sockets TCP sur le port 9000. J'ai ajusté le nombre de connexions max via sysctl à 1024. J'ai fixé le max_execution_time (dans php.ini) et le request_terminate_timeout (dans le fichier conf de FPM) à 30 secondes.
De temps en temps (disons toutes les 8-10 heures, et pas de façon linéaire), le nombre de connexions TCP ouvertes sur le port 9000 atteint près de 1000 (en état CLOSE_WAIT la plupart du temps, quelques FIN_WAIT, FIN_WAIT_2), dépassant parfois 1000, et mon serveur web commence à renvoyer des erreurs 504. Une fois que j'ai supprimé toutes les connexions TCP sur ce port et que j'ai redémarré FPM, il recommence à fonctionner correctement.
J'ai activé le slow log pour voir ce qui se passe, et si j'ai bien compris, il est bloqué sur les appels apc_store().
S'agit-il d'une mauvaise configuration d'APC ou dois-je modifier les paramètres de FPM ? Et y a-t-il un moyen de forcer ces connexions TCP à se terminer même si le script n'envoie pas le signal de terminaison final ?
Exemple de trace provenant du journal lent de FPM :
[22-Jan-2015 09:42:49] [pool www] pid 20327
script_filename = /var/www/index.php
[0x00007fdc527ec908] apc_store() /var/www/wp-content/plugins/w3-total-cache/lib/W3/Cache/Apc.php:55
[0x00007fdc527ec768] set() /var/www/wp-content/plugins/w3-total-cache/lib/W3/ObjectCache.php:254
[0x00007fdc527ec5e0] set() /var/www/wp-content/plugins/w3-total-cache/lib/W3/ObjectCache.php:300
[0x00007fdc527ec488] add() /var/www/wp-content/plugins/w3-total-cache/lib/W3/ObjectCacheBridge.php:73
[0x00007fdc527ec330] add() /var/www/wp-content/object-cache.php:94
[0x00007fdc527ec200] wp_cache_add() /var/www/wp-includes/option.php:176
[0x00007fdc527ec078] wp_load_alloptions() /var/www/wp-includes/functions.php:1272
[0x00007fdc527ebf40] is_blog_installed() /var/www/wp-includes/load.php:474
[0x00007fdc527ebdb0] wp_not_installed() /var/www/wp-settings.php:109
[0x00007fdc527ebc88] +++ dump failed