我目前有一个与我的Node.js应用程序的套接字泄漏。 这个bug也贴在这里 。 我希望尽快解决这个问题。 CLOSE_WAIT和FIN_WAIT2似乎是主要问题。
Connections: 1662 ESTABLISHED: 238 CLOSE_WAIT: 770 FIN_WAIT1: 4 FIN_WAIT2: 632
以下数据是通过input(替代)如下来检索:
netstat -anp | grep ${node_pid} | wc -l
我读过,你可以通过调整这些variables来解决这个问题:
net.ipv4.tcp_fin_timeout ( = 60 ) net.ipv4.tcp_keepalive_time ( = 7200 )
虽然我的tcp_fin_timeout被设置为60秒,但是我的套接字在那里保持了60秒以上。 这就是为什么我认为我应该调整tcp_keepalive_time 。
它托pipe在运行Apache和MySQL的Linux Centos 5服务器上。
我可以轻易地将tcp_keepalive_time减less到1800,还是会对Apache产生负面影响?
您可以调整多个选项以保存与连接相关的服务器资源。 看到这个页面的几个选项和他们的描述。 另请参阅该页末尾的参考列表:
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减less为20,因为这样可以解决连接生命周期/需求结束时出现的问题。 对于tcp_keepalive_time也是一样,如果你把它降低到一个合理的值而不是太低(比如600,和tcp_keepalive_intvl和tcp_keepalive_probes一起使用)。
不应该有任何负面影响与您的Apache服务器,因为典型的Web HTTPstream量是非常突然和短暂的。 除非用户通过丢包率非常高的链接下载大文件,否则访问您的网站将是他们最担心的问题。
如果你只是阅读手册页和这些链接,它应该变得漂亮(任何混乱,显然在这里发表一个问题!)。