我的 Node.js 应用程序目前存在套接字泄漏。此错误也发布在这里。我希望尽快修复这个问题。CLOSE_WAIT 和 FIN_WAIT2 似乎是主要问题。
Connections: 1662
ESTABLISHED: 238
CLOSE_WAIT: 770
FIN_WAIT1: 4
FIN_WAIT2: 632
通过输入(类似的替代方法)可以检索以下数据:
netstat -anp | grep ${node_pid} | wc -l
我读到过,你可以通过调整这些变量来解决这个问题:
net.ipv4.tcp_fin_timeout ( = 60 )
net.ipv4.tcp_keepalive_time ( = 7200 )
尽管我的 tcp_fin_timeout 设置为 60 秒,但我的套接字仍停留在那里超过 60 秒。这就是为什么我认为我应该调整tcp_keepalive_time
。
它托管在 Linux Centos 5 服务器上,该服务器还运行 Apache 和 MySQL。
我可以轻松地将其减少tcp_keepalive_time
到 1800 左右吗,或者这会对 Apache 产生负面影响吗?
答案1
有多个选项可以调整以节省与连接相关的服务器资源。请参阅这一页了解几个选项及其说明。另请参阅该页末尾的参考列表:
man 7 ip
man 7 tcp
http://www.faqs.org/docs/securing/chap6sec70.html
http://man7.org/linux/man-pages/man7/ip.7.html
http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html
您可以将 tcp_fin_timeout 减少到 20,因为这解决了在连接生命周期/要求结束时出现的问题。tcp_keepalive_time 也一样,如果您将其降低到一个合理的值,而不是太低(例如,与 tcp_keepalive_intvl 和 tcp_keepalive_probes 一起使用时为 600)。
您的 Apache 服务器不应该受到任何负面影响,因为典型的 Web HTTP 流量非常突发且持续时间很短。除非用户通过数据包丢失率很高的链接下载大文件,在这种情况下,访问您的网站将是他们最不用担心的事情。
如果您只是阅读手册页和那些链接,它就会变得很漂亮(如有任何疑问,请在这里发布问题!)。