找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4423|回复: 3

accept出现错误是怎么回事!!

[复制链接]
发表于 2007-12-12 23:51:35 | 显示全部楼层 |阅读模式
我用的是 ace 5.5 ,跑在windows2003 服务器上。服务器启动后,在接受到1000~3000 个连接时,ACE就会崩溃,在 accept 内部 ACE_WIN32_Asynch_Accept::accept 内部        accept_handle = ACE_OS::socket (addr_family, SOCK_STREAM, 0); 处。是我自己使用的问题还是ace本身的问题呀。 我用的是ACE的完成端口模型。
好像跟人多也没有关系,像是有规律的 ,到了 3000个连接时就要down掉(从服务器启动一共连入3000客户端时,平时有40~80个人在线)。是不是我的什么句柄没有释放,还是ace5.5 版本本身有问题。
有这样几个现象:
1 好像和人数无关,崩溃时都不是人数最多时。
2 好像和服务器启动后的总连接数有关,总是在1000~3000之间,3000左右的最多。
3 accept 出问题后,几个监听线程都回出同样的问题,我try catch 住了以后,后来的客户端都连接不上了,但是已经进入的客户端还能正常收发消息。
高手们帮帮忙呀,愁死了我,服务器几乎是1天down一次。
 楼主| 发表于 2007-12-12 23:51:46 | 显示全部楼层
看你说的情况很像内存泄露,是不是关闭连接的地方有未清理的资源?观察一下你的服务占用的内存情况,有没有随运行时间的推移不停增长的迹象。

在资源耗尽的情况下,确实会有套接字创建失败的问题,大概可以确定你的服务是资源耗尽了,具体原因再好好查一查。

ace5.5的完成端口模型我也在用,还是很稳定的。
 楼主| 发表于 2007-12-12 23:51:52 | 显示全部楼层
您指的是系统内存占完,还是别的什么资源。

服务器的整体内存占用很少,2G的内存才占300兆(一共),进程本身的内存也不增长多少,现在是内存25m,虚拟内存28m,一直是差不多这样。

我怀疑是占用了其他的什么资源没有释放,但是不知道是什么资源。
 楼主| 发表于 2007-12-12 23:51:59 | 显示全部楼层
我提个建议,我也遇见过服务器程序异常的时候,你这样调试一下:
1、上传windows服务器程序的时候,要连带release的PDB调试文件,放在一起运行。
2、服务器上面安装windows符号。
3、在出现问题的时候,运行ProcessExplorer,打开异常的服务器程序,打开线程堆栈,你能发现那些线程正在做什么,调用的顺序关系,能看见函数名的。
4、ProcessExplorer需要配置符号目录位置,要指向你的服务器程序所在的目录。
5、复制你看到的堆栈信息,保存并分析。
我就是凭借上面的办法,找到了我的服务器程序的问题!
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 15:50 , Processed in 0.013254 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表