我使用ubuntu(12.04)+ nodejs(v0.10.22)+ socket.io(v0.9.14)来传输消息.
有大约300个同时连接.几个小时后(大约1或2个小时,它没有立即显示),一些连接将持续处于CLOSE_WAIT或FIN_WAIT2状态.
而这些未死亡的连接随着时间线性增长.当连接数达到限制(默认1024)时,用户将难以连接套接字服务器,除非某些连接正常释放.
以下是套接字服务连接状态,运行大约3个小时.
netstat -anl | grep可能是解决方案| awk '/^tcp/ {t[$NF]++}END{for(state in t){print state, t[state]} }' FIN_WAIT2 23 LISTEN 1 CLOSE_WAIT 27 TIME_WAIT 12 ESTABLISHED 333 FIN_WAIT1 12
使用Nodemon Package运行js文件,当更改文件的上次修改时间时,nodemon将重新启动服务,并释放所有先前的未连接连接(CLOSEWAIT或FINWAIT2)
sudo vim /etc/security/limits.conf * soft nofile 1024 * hard nofile 2048 root soft nofile 4096 root hard nofile 8192 user1 soft nofile 2048 user1 hard nofile 2048
尽量让连接难以达到极限.
让操作系统在短时间内自动关闭连接,但我还没试过.
题我找到了一些解决问题的方法.但上述解决方案并没有真正解决状态CLOSE_WAIT或FIN_WAIT2问题的持久连接.我发现这是服务器(CLOSE_WAIT)或客户端(FIN_WAIT2)没有正确关闭连接的结果.我认为socket.io会在一些超时后强行关闭这些错误的连接.但它似乎无法正常工作.
我尝试在我的测试环境中重新出现状态CLOSE_WAIT或FIN_WAIT2问题.但它从未显示出这些连接情况.
连接套接字服务器和断开网络后
连接套接字服务器很长一段时间
我之前发现有人问相关问题(状态CLOSE_WAIT和FIN_WAIT2中的许多陈旧连接),但仍无法找到解决方案.有谁知道如何解决这个问题?
谢谢