socket服务端长时间运行后连不上了

羽毛乱发 2015-11-19 11:50:29
IOCP写的服务端,自己做过压力测试,连接上万个socket对象没有问题,但是现在发现这么个现象,放在服务器上连续运行了两个多月后,连接数统计出来也就1000多个,然后客户端连接不上了,telnet下也失败,重启下服务就好了。
请大侠们分析下,大概是哪里出现问题了?
...全文
388 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
羽毛乱发 2015-11-24
  • 打赏
  • 举报
回复
引用 9 楼 hbs_biscuit 的回复:
先到服务器上 看下 socket 是不是有 大量的 time_wait 等, 是不是是 socket资源消耗掉了
下次出现这个情况我看看,上次太急了,直接重启掉了。
hbs_biscuit 2015-11-23
  • 打赏
  • 举报
回复
先到服务器上 看下 socket 是不是有 大量的 time_wait 等, 是不是是 socket资源消耗掉了
羽毛乱发 2015-11-20
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
看看是不是有socket句柄泄漏等,以及资源泄漏。
能否说点再仔细点?
羽毛乱发 2015-11-20
  • 打赏
  • 举报
回复
引用 2 楼 xian_wwq 的回复:
[quote=引用 楼主 shengliz 的回复:] IOCP写的服务端,自己做过压力测试,连接上万个socket对象没有问题,但是现在发现这么个现象,放在服务器上连续运行了两个多月后,连接数统计出来也就1000多个,然后客户端连接不上了,telnet下也失败,重启下服务就好了。 请大侠们分析下,大概是哪里出现问题了?
如果使用的acceptex方式,建议对投递过程进行跟踪, 针对性的加上调试日志信息 查找是否存在某种异常情况导致需要投递的时候没有投递,或者投递后发生异常, 导致客户无法连接 [/quote] 确实,我是用acceptex投递的。 pAcceptIoContext->m_sockClient = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED); if( INVALID_SOCKET==pAcceptIoContext->m_sockClient ) { memset(szLog,0,sizeof(szLog)); sprintf_s(szLog,sizeof(szLog),"----[_PostAccept]创建用于Accept的Socket失败!错误代码: %d ",WSAGetLastError()); if (m_bSaveLog) CMyLog::SaveLog(szLog);TRACE("%s\n",szLog); return false; } // 投递AcceptEx if(FALSE == m_lpfnAcceptEx( m_pListenContext->m_Socket, pAcceptIoContext->m_sockClient, p_wbuf->buf, 0, sizeof(SOCKADDR_IN)+16, sizeof(SOCKADDR_IN)+16, &dwBytes, p_ol)) { if(WSA_IO_PENDING != WSAGetLastError()) { memset(szLog,0,sizeof(szLog)); sprintf_s(szLog,sizeof(szLog),"----[_PostAccept]投递 AcceptEx 请求失败,错误代码: %d ",WSAGetLastError()); if (m_bSaveLog) CMyLog::SaveLog(szLog);TRACE("%s\n",szLog); return false; } }
羽毛乱发 2015-11-20
  • 打赏
  • 举报
回复
引用 1 楼 boylafong 的回复:
你这个很象资源未能正确的释放,才造成必须重启。 你再检查下代码 你的压力测试有数据传输吗?还是只连接下?
压力测试有数据传输的,但是时间不怎么长,10多分钟而已。
worldy 2015-11-19
  • 打赏
  • 举报
回复
资源泄露,内存或者句柄
孤客天涯 2015-11-19
  • 打赏
  • 举报
回复
感觉有点象句柄泄漏
oyljerry 2015-11-19
  • 打赏
  • 举报
回复
看看是不是有socket句柄泄漏等,以及资源泄漏。
xian_wwq 2015-11-19
  • 打赏
  • 举报
回复
引用 楼主 shengliz 的回复:
IOCP写的服务端,自己做过压力测试,连接上万个socket对象没有问题,但是现在发现这么个现象,放在服务器上连续运行了两个多月后,连接数统计出来也就1000多个,然后客户端连接不上了,telnet下也失败,重启下服务就好了。 请大侠们分析下,大概是哪里出现问题了?
如果使用的acceptex方式,建议对投递过程进行跟踪, 针对性的加上调试日志信息 查找是否存在某种异常情况导致需要投递的时候没有投递,或者投递后发生异常, 导致客户无法连接
boylafong 2015-11-19
  • 打赏
  • 举报
回复
你这个很象资源未能正确的释放,才造成必须重启。 你再检查下代码 你的压力测试有数据传输吗?还是只连接下?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧