Ubuntu服务器10.04.2
$ uname -a Linux my.local 2.6.32-30-generic-pae#59-Ubuntu SMP 星期二3月1日23:01:33 UTC 2011 i686 GNU / Linux
看起来,我的域套接字队列溢出,但我不能certificate这一点。
我有这个栈nginx->[spawn-fcgi->multiwatch->]custom-fcgi-service
Nginx通过unix域套接字与custom-fcgi-service进行通信。
今天我们的stream量略有增加,突然我的nginx error.log里充满了鳗鱼:
2011/04/07 15:31:51 [error] 28187#0:* 469350连接()到unix:/tmp/my.socket 连接上游失败(11:资源暂时不可用) 客户端:[IP witheld],服务器:my.local,请求:“GET / myurl HTTP / 1.0”, 上游:“fastcgi:// unix:/tmp/my.socket:”,主机:“example.com”
一些请求通过,但许多返回5xx错误。
如果我重新启动custom-fcgi-service ,错误消失,但很快就会重新出现。 在检查了custom-fcgi-service状态后,我相当确定它可以正常工作(虽然对于这个stream量来说可能太慢,但这仅仅是一个假设)。
我试过这样做:
echo 65535> / proc / sys / net / unix / max_dgram_qlen
但是这并没有太大帮助。 (不知道时间到错误是否变得更长,可能是,但不足以解决它。)
如果增加custom-fcgi-service的工作人员数量,错误不会出现更长的时间,但到目前为止,我无法增加足够高的工人数量来解决它永远。 这台机器上的CPU和内存以及IO负载都在限制之内,所以我认为custom-fcgi-service在一些后续的networking调用中速度很慢。
问题是:如何debugging这个问题? 如果确实是套接字队列的长度,那么如何制作一个传感器来警告我们,我们需要分配更多的custom-fcgi-service工作者?
好像你有连接问题,而不是发送。 尝试增加内核接收器积压:
echo "2000" > /proc/sys/net/core/netdev_max_backlog
要么
sysctl –w sys.net.core.netdev_max_backlog=2000
你有没有检查系统日志(例如dmesg)?
尝试改变spawn的configuration文件,积压:4096。