当连接数约为 +10K 时,我经常会在随机页面上收到此错误 (netstat -an |grep 80 |wc -l)。当仍有 +10GB 可用内存且服务器负载小于 3 时,就会发生这种情况。
我的相关配置:
/etc/php5/fpm/php.ini
memory_limit = 1024M
default_socket_timeout = 120
/etc/php5/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 5
;pm.max_requests =20000 #uncommented with any value didn't fixed
request_terminate_timeout = 120s
我还将上述值加倍(即 60 个子项、10 个启动项、10 个最大服务器),但无济于事。
/etc/nginx/nginx.conf
worker_connections 4024;
keepalive_timeout 10;
Nginx 本身在 Varnish 和 memcached 后面启用。页面渲染总体来说比较快。
这似乎是一个相当常见的问题,我找不到任何有用的解决方案,甚至找不到可能的原因分析。因此,非常感谢您的提示/解决方案。
答案1
不幸的是,如果没有更多细节,很难对这个问题给出明确的答案。
不过我有几个猜测:
我的第一个猜测是您的 php5-fpm 工作套接字的侦听积压量太小,无法满足您的负载。Linux 上的默认积压队列长度为 128。
为了增加它你应该:
- 增加
net.core.somaxconn
sysctl 值。 - 增加
listen.backlog
php5-fpm配置设置。
例如,您可以尝试将两者都增加到 2048,看看是否有帮助。
我的第二个猜测是 nginx 工作进程的每个进程最大打开文件描述符限制。增加它的正确方法取决于您的发行版。在 Ubuntu/Debian 上,您应该查看/etc/default/nginx
文件和worker_rlimit_nofile
nginx 配置设置。