我使用APCcaching(通过W3 Total Cache插件)通过nginx / PHP5-FPM提供Wordpress页面。 Nginx通过端口9000上的TCP套接字与PHP-FPM进行通信。我已经通过sysctl调整了最大连接数为1024.我已经将max_execution_time(在php.ini中)和request_terminate_timeout(在FPM conf文件中)设置为30秒。
时不时地(每隔8-10个小时,而不是线性地),端口9000上的开放TCP连接数量增长到接近1000(主要是CLOSE_WAIT状态,一些FIN_WAIT,FIN_WAIT_2),有时会超过1000,并且我的Web服务器启动返回504错误。 一旦我终止该端口上的所有TCP连接并重新启动FPM,它就会再次正常工作。
我启用了缓慢的日志,看看发生了什么,如果我正确地阅读它,它挂在apc_store()调用。
这是一个APCconfiguration错误,还是我需要调整与FPM设置? 有没有办法强制这些TCP连接终止,即使脚本不发送最终的终止信号?
来自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
看起来您有很多TCP连接没有正确终止。 基本上, CLOSE_WAIT连接意味着服务器已经收到了一个FIN数据包,现在正在等待最大数据段生命期或服务器告诉networking堆栈closures套接字。 FIN_WAIT消息是由于“服务器”向客户端发送FIN ,但客户端尚未发送(或者说服务器尚未接收到) FIN-ACK以确认连接已closures。