查看完整版本: [-- QTcpServer诡异问题 --]

QTCN开发网 -> Qt基础编程 -> QTcpServer诡异问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

liulin188 2020-12-29 21:40

QTcpServer诡异问题

该怎么说呢,有2台阿里云服务的server都出现了一个诡异情况:
server程序在运行一段时间后,出现端口在监听,但是新连接进不来,本地telnet都不通。
之前有一台在运行20天以后有这个问题,由于时间比较长我就没管它。

最近另一台服务器一直运行的好好的server程序,居然出现不到24小时,几个小时就出现这个情况,比较容易复现,所以就想彻底搞明白。

在研究了2天之后,我发现情况是这样的:
server程序在运行一段时间后,突然,很突然,差不多一瞬间的事,端口不通了,netstat查看端口依然在监听,然后出现了大概有50个左右CLOSE_WAIT状态的连接。这些CLOSE_WAIT是一起瞬间冒出来的,不是慢慢积累的!
我的服务器是被动关闭连接,给我的感觉就是突然间这个端口被挂起来,连关闭都没来得及,就被挂起冻结的感觉,之后就不通。然后我不用重启server程序,直接调用QTcpServer的close在调用listen就又继续工作了。

一开始我怀疑是我server程序关闭socket有bug,但是检查之后确实都关了。
而且我测试如果服务器故意不关闭socket之后有两点不同:
1,如果服务器不关闭socket,50个左右的CLOSE_WAIT状态根本没影响,可以继续通信。
2,如果服务器不关闭socket,这个CLOSE_WAIT状态,必须要重启这个server程序进程才会消失,但是我现在的情况如上所说不用重启进程,只需要调用QTcpServer的close在调用listen,所有的CLOSE_WAIT状态就没了。

所以我感觉可能99%不是程序的问题。。。
不知道有没有人碰到过这种情况,或者给点提示,真的纠结的一批~~~~








九重水 2020-12-30 16:10
路过帮顶,楼主最后两句出现了程序员最著名的一句话引起我方注意:
100%,99%不是我程序的问题。

这种问题一般是程序问题;
然后可能是设置的超时问题;
其它问题。
百度一下‘浅谈CLOSE_WAIT’会有惊喜。

总结:出现大量的CLOSE_WAIT,几乎可以肯定就是server端coder的锅。

liulin188 2020-12-30 18:14
九重水:路过帮顶,楼主最后两句出现了程序员最著名的一句话引起我方注意:
100%,99%不是我程序的问题。[表情]
这种问题一般是程序问题;[表情]
然后可能是设置的超时问题;
....... (2020-12-30 16:10)

你看完我后面的再说
第1不是大量,就几十个,不足以引起端口崩溃。
第2不是程序引起的。我后面有说明。
第3我现在有4台服务器在跑,只有阿里云的2台出现这个情况,其他2台已经跑了有半年,未出现。




海森堡 2020-12-30 18:27
你这个问题应该不难重现。你在内网做实验,把server的网线拔掉10分钟再插上,看看还有没有这个问题


查看完整版本: [-- QTcpServer诡异问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled