大家帮帮忙,IOCP服务端运行10多个小时后,收不到数据的有关问题

大家帮帮忙,IOCP服务端运行10多个小时后,收不到数据的问题
问题主要如下:
1、刚开始是正常的,10多个小时后,就莫名其妙的收不到数据了。
1、投递AcceptEx是正常的,能收到客户端连入的消息,从SOCKADDR上看,IP和端口也是正常的。
2、在GetQueuedCompletionStatus返回ACCEPT消息后,WSARecv也是正常的,返回值为0。

只要出问题了,WSARecv之后,不会收到客户端的send过来的包,也收不到客户端断开closesocket的消息。


------解决思路----------------------
一个是添加日志等,多增加一些信息来分析,然后另一个就是查看一下系统配置,比如端口,内存泄漏等。
------解决思路----------------------
内存泄露,没有内存可用了?

服务器重启,看是否会恢复正常
------解决思路----------------------
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!

------解决思路----------------------
引用:
谢谢大家,现在我感觉有点像是有死连接没有被关闭掉而导致的问题,因为在任务管理器中,句柄数一直在缓慢的增加,但是我已经有一个线程在检查最后操作时间如果>10000ms则直接当作死连接关闭掉,为什么会这样呢,好烦恼啊。

句柄数持续增长大致分2种情况
1.资源泄露,这个可以借助工具检测 ,跟踪句柄使用htrace
可以参考:http://blog.****.net/tpriwwq/article/details/9082709
2.处理流程存在性能瓶颈,导致系统资源耗尽。
这种情况比较麻烦,需要对于业务流程做优化

------解决思路----------------------
引用:
问题主要如下:
1、刚开始是正常的,10多个小时后,就莫名其妙的收不到数据了。
1、投递AcceptEx是正常的,能收到客户端连入的消息,从SOCKADDR上看,IP和端口也是正常的。
2、在GetQueuedCompletionStatus返回ACCEPT消息后,WSARecv也是正常的,返回值为0。

只要出问题了,WSARecv之后,不会收到客户端的send过来的包,也收不到客户端断开closesocket的消息。

1.server对于连接请求不能是无限制的,自行设定上限,
超过阀值拒绝接入,
防止恶意攻击导致系统资源耗尽
2. 关注工作异常情况下,软件占用资源情况
比如句柄、分页内存等等