我通过nginx/PHP5-FPM (通过W3全缓存插件)为Wordpress页面提供服务。Nginx通过端口9000上的TCP套接字与PHP通信。我调整了通过sysctl的最大连接数为1024。我已经将max_execution_time (在php.ini中)和request_terminate_timeout (在FPM文件中)设置为30秒。
不时(比方说每8-10小时,而不是线性地),端口9000上打开的TCP连接数量增加到近1000个(在CLOSE_WAIT状态下,大部分是FIN_WAIT、FIN_WAIT_2),有时超过1000个,而我的web服务器开始返回504个错误。一旦我关闭了该端口上的所有TCP连接并重新启动FPM,它就会再次正常工作。
我启用了缓慢日志来查看发生了什么,如果我正确地阅读了它,它就挂在apc_store()调用上。
这是APC的错误配置,还是我需要调整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发布于 2015-01-22 18:09:52
看起来,您有许多TCP连接没有正确终止。基本上,CLOSE_WAIT连接意味着服务器已经接收到FIN数据包,现在正在等待最大段生存期或服务器告诉网络堆栈关闭套接字。FIN_WAIT消息是因为“服务器”向客户端发送了一个FIN,但是客户机尚未发送(或者更确切地说,服务器尚未收到)一个FIN-ACK来确认连接已关闭。
https://serverfault.com/questions/661624
复制相似问题