疑难杂症:TCP服务器,长期运行后,客户端无法连接

lsgt lsgt 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
TCP多线程服务器,一个线程监听,来一个连接就起一个线程处理。进程中有两个这样的服务器,监听不同的端口,端口A来的是长连接,端口B除了一个长连接之外,还接受每10秒2个的短连接。

连续正常运行20多天后(故障报上来的时候是28天多一点),telnet端口B失败,connect也失败。但端口B上的长连接工作正常(数据一直在走),端口A也正常,可以telnet,也可以connect。(两个TCP服务器是相同的代码,两个实例而已,唯一的区别就是监听端口不同,且端口B上多了每10秒2个的短连接)。

重启进程后(未重启操作系统),故障消除。重启前观察到:
端口B处于listening状态,netstat无TIME_WAIT的socket及其他异常连接;
操作系统的句柄数量正常(5k左右,与重启后一致);
CPU负荷正常(4%左右,与重启后一致)

补充:
操作系统是WindowsXP;
短连接客户端未主动断开,而是被服务器超时检查断开;
程序日志默认未开启端口B的连接日志记录(量太大)。此时若打开日志,需要重启进程才生效,就不知道要等多久才能抓到了;
另外,这个程序运行在几十台相同平台上,目前有两台出现这个问题(其中一台已经重启进程,另一台未重启,故障依然),其他的暂正常。

请大家帮忙看看,问题可能出在哪儿,还需要检查些什么(还有一台还没重启进程)。
...全文

相关推荐

评论 48
收藏 已收藏
分享
返回顶部
lsgt
网络编程 18,356 成员 64,161 内容