Ubuntu 11.04,node.js 0.6.16,nginx 1.0.8
我开始调试以下错误,我们在高负载下(约 3500 个用户主动长轮询/进行 api 调用)经常从前端记录该错误:
parsererror:Error: jQuery171045845469435053_1347386706235 was not called",
所有产生此错误的调用都是通过 nginx 代理到 node.js 服务器的长轮询。
当这种情况发生时,我发现服务器的以下位置出现以下错误:
/var/log/syslog
每隔几分钟我就会看到这些内容:
[6356088.813219] TCP: Possible SYN flooding on port 8894. Sending cookies.
在 nginx 中error.log
,我发现以下两个错误出现得比较频繁:
2012/09/11 18:13:05 [error] 25104#0: *1229679431 upstream timed out (110: Connection timed out) while connecting to upstream,
和
2012/09/11 18:10:38 [error] 25103#0: *1229382210 recv() failed (104: Connection reset by peer) while reading response header from upstream,
================================
在过去的几个月里,当我们的流量稳步增长时,我调整了以下系统参数(以及其他参数):
ulimit
对于运行进程的用户来说设置得非常高(我认为是 16000)- 将 nginx 设置
worker_connections
为 16024 - 将
sysctl
net.ipv4.tcp_max_syn_backlog
和设置net.core.somaxconn
为 4096
=================================
这似乎表明 node.js 服务器正在不正常地关闭连接或被系统强制关闭连接。我该如何验证我的假设?