急:winXP上服务程序的所有连接经常全部被断开,想请教这是什么原因,如何解决?

roger_77 2008-12-25 05:21:38
急:winXP上服务程序的所有连接经常全部被断开,想请教这是什么原因,如何解决?

平台:CPU P4 2.0G,内存:512MB,windows xp sp2,TCP的连接数已经修改为1024.

该平台运行的一个服务程序,连接了很多客户端(大约有300个左右的连接),客户端与服务器不在同一台机器。
问题的症状是:服务经常在运行一段时间后,所有的客户端都被断开(别的机器打开它的网络共享文件夹也被断开了),而且其它机器上的客户端无法重新连接上该服务程序,但与服务程序在同一台机器上的客户端却可以正常连接上。只有把服务程序重启后,其它机器的客户端才可以正常连接。

服务程序中,网络编程使用了多个第三方库:CORBA,Boost::ASIO,winsocket等

请教这是由什么原因引起的,如何解决?急
...全文
283 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_77 2009-02-19
  • 打赏
  • 举报
回复
修改服务器上的网卡参数后似乎问题得到缓解或解决。
有待以后的进一步观察。
非常感谢各位热心的朋友!
roger_77 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 cnzdgs 的回复:]
检查一下进程对各种资源的占用情况。
[/Quote]
请问一般是哪些资源占用过高导致这种问题出现呢?
服务器一旦出现所有的连接断开后,
如果该服务程序不退出,该服务器就像成了一个孤岛,无法与其它机器互连(不管是用ping、网络共享文件夹的方式,或者其它网络连接程序),但可以自连。

只有把该服务程序退出后,服务器的网络连接才可以正常。
真的比较难理解问题的所在,因为如果说是服务器的网络阻塞了,为什么本机的客户端却还可以连接上服务程序呢?
roger_77 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 oyljerry 的回复:]
引用 14 楼 roger_77 的回复:
问题的症状补充:
一旦出现服务器断开所有连接问题后,服务器既无法被别的机器ping到,也无法主动连接到别的机器,但本机的客户端却可以连接上该服务程序(用固定IP而非127.0.0.1)。当关闭服务器上的该服务程序后,所有的网络连接又都正常了。

检查一下这个时候的网络连接,TCP连接数等,是不是负荷很高
[/Quote]
服务器断开所有的连接后,应该来说它的TCP连接应该很快就降低了,为什么还会导致别的机器无法连接呢?
Wenxy1 2008-12-26
  • 打赏
  • 举报
回复
做代码审查吧,重点检查服务器程序的网络部分。

喊两个高手,一起审查代码。
roger_77 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 cnzdgs 的回复:]
这问题我没遇到过,只能凭猜测,感觉与内核资源占用有关,例如系统非分页内存不足等情况。
[/Quote]
关键是虽然无法与其它机器连接,但服务器上的本机程序可以互连,而且空闲的物理内存也只使用了一半左右,应该不属于内存不足引起。
现在服务器这个症状经常发生,解决不了,急死人了!
roger_77 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wenxy1 的回复:]
检查一下堆内存申请是否成功?所有的客户端都被断开(别的机器打开它的网络共享文件夹也被断开了), 感觉像内存资源耗尽。
[/Quote]
现在的情况是,服务器加了1GB的内存,共有1.5GB的物理内存,服务程序运行时一般只需要用到600MB左右的内存资源,所以不是内存资源的问题。
Wenxy1 2008-12-26
  • 打赏
  • 举报
回复
检查一下堆内存申请是否成功?所有的客户端都被断开(别的机器打开它的网络共享文件夹也被断开了), 感觉像内存资源耗尽。
cnzdgs 2008-12-26
  • 打赏
  • 举报
回复
这问题我没遇到过,只能凭猜测,感觉与内核资源占用有关,例如系统非分页内存不足等情况。
cnzdgs 2008-12-25
  • 打赏
  • 举报
回复
检查一下进程对各种资源的占用情况。
oyljerry 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 roger_77 的回复:]
问题的症状补充:
一旦出现服务器断开所有连接问题后,服务器既无法被别的机器ping到,也无法主动连接到别的机器,但本机的客户端却可以连接上该服务程序(用固定IP而非127.0.0.1)。当关闭服务器上的该服务程序后,所有的网络连接又都正常了。
[/Quote]
检查一下这个时候的网络连接,TCP连接数等,是不是负荷很高
ilovedrv 2008-12-25
  • 打赏
  • 举报
回复
出现异常时,用抓包工具看看,连接时是否进行了三次握手
roger_77 2008-12-25
  • 打赏
  • 举报
回复
问题的症状补充:
一旦出现服务器断开所有连接问题后,服务器既无法被别的机器ping到,也无法主动连接到别的机器,但本机的客户端却可以连接上该服务程序(用固定IP而非127.0.0.1)。当关闭服务器上的该服务程序后,所有的网络连接又都正常了。
yhhxq 2008-12-25
  • 打赏
  • 举报
回复
up
roger_77 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 oyljerry 的回复:]

句柄泄漏就需要检查所有的句柄操作,是不是正确关闭释放了
[/Quote]
句柄泄漏为什么会导致所有的网络连接断开呢?
而断开后本机的客户端却可以连接上服务程序,其它机器的客户端就不行???
oyljerry 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 roger_77 的回复:]
不存在内存泄露。
句柄泄露,网络阻塞?如何检查解决?
[/Quote]
句柄泄漏就需要检查所有的句柄操作,是不是正确关闭释放了
roger_77 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 oyljerry 的回复:]
引用 4 楼 roger_77 的回复:
在进程管理器中观察,好像存在句柄泄露。
这与客户端连接断开相关吗?

顺便补充一下问题描述:服务程序运行中,要适应经常有客户端断开重连的需要。

客户断开连接后,记得释放句柄
CloseHandle
[/Quote]
连接断开后,socket肯定是有close操作的。而且在服务程中,断开时接收到错误代码是:10054。
roger_77 2008-12-25
  • 打赏
  • 举报
回复
不存在内存泄露。
句柄泄露,网络阻塞?如何检查解决?
oyljerry 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 roger_77 的回复:]
在进程管理器中观察,好像存在句柄泄露。
这与客户端连接断开相关吗?

顺便补充一下问题描述:服务程序运行中,要适应经常有客户端断开重连的需要。
[/Quote]
通过heartbeat等机制来检测连接是否中断
oyljerry 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 roger_77 的回复:]
在进程管理器中观察,好像存在句柄泄露。
这与客户端连接断开相关吗?

顺便补充一下问题描述:服务程序运行中,要适应经常有客户端断开重连的需要。
[/Quote]
客户断开连接后,记得释放句柄
CloseHandle
roger_77 2008-12-25
  • 打赏
  • 举报
回复
服务器是固定IP的,在局域网内.
加载更多回复(5)

18,356

社区成员

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

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