Estou servindo páginas do Wordpress via nginx / PHP5-FPM usando cache APC (através do plugin W3 Total Cache). O Nginx se comunica com o PHP-FPM através de sockets TCP na porta 9000. Ajustei o número de conexões máximas via sysctl para 1024. Configurei max_execution_time (no php.ini) e request_terminate_timeout (no arquivo conf do FPM) para 30 segundos.
De vez em quando (digamos a cada 8-10 horas, e não linearmente) o número de conexões TCP abertas na porta 9000 aumenta para quase 1.000 (no status CLOSE_WAIT principalmente, algumas FIN_WAIT, FIN_WAIT_2), superando 1000 vezes, e meu o servidor da web começa a retornar erros 504. Uma vez que eu mato todas as conexões TCP naquela porta e reinicio o FPM, ele começa a funcionar bem novamente.
Eu ativei o log lento para ver o que está acontecendo e, se estou lendo corretamente, ele está pendurado em chamadas apc_store ().
Este é um erro de configuração do APC ou eu preciso ajustar com as configurações do FPM? E existe uma maneira de forçar essas conexões TCP a serem encerradas, mesmo se o script não enviar o sinal de finalização final?
Rastreio de exemplo do log lento do 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