WINsocket服务内存严重泄漏的问题讨论.十万火急!写过SOCKET服务的大哥们都进来看看 ( 积分: 300 )

  • 主题发起人 主题发起人 sbamwdx
  • 开始时间 开始时间
S

sbamwdx

Unregistered / Unconfirmed
GUEST, unregistred user!
谁解决了,把我的所有分都给他!
代码如下:
-,启动
p:TLinger;
FListenSocket := WSASocket(AF_INET, SOCK_STREAM, 0, nil, 0,
WSA_FLAG_OVERLAPPED);
p.l_onoff:=1;
p.l_linger:=0;
setsockopt(FListenSocket, SOL_SOCKET, SO_LINGER, @p, sizeof(p));
二,断开
closesocket(SocketInfo); //关闭
其中省略了一些异常处理的语句。 程序主体已经用FASTMM4调试,确认无内存泄漏!
现在的问题是 连接人数才到五六百人内存就狂增到两G(虚拟内存)。很恐怖的数字!!
 
怎么没人回答? 服务程序除了线程外就只有 创建出来的socket监听服务。现在我已经在一定时间内让线程自动释放并重新创建。这样只要>500人的在用户虚拟内存狂增。我还发现增加上去的虚拟内存有90%的可能是发到套接字的消息,因为在用户同时上线或同时掉线时都要向所有用户广播,这时虚拟内存的增加就会一翻倍,但增加上的虚拟内存并没有完全释放。
所以,我最终想知道的是winSocket是不是会真的内存泄漏!如果真的有泄漏那要如何应对!
 
肯定是你中间的代码有问题.
服务程序我也写,五六千人在线跑,一般几个月都没重启,内存占用很稳定.
 
东兰居然出现了,支持下。
 
客气客气.能让半夜上网的老兄认识,真是一件荣幸的事.
 
应该是其它代码的问题,我也用socket做过服务器,也曾碰到内存泄露的问题,用内存检测工具怎么都检测不出来,每个模块都检测了,还是不行。
后来才发现,是自己的一个类在释放时泄漏了资源,AllocMem的内存没有释放。
你再找找其它代码的问题吧。
 
好吧,我已经得到第一个答案,今天换服务器。明天可以看到结果
 
因为 问题已经,所以把分全给了吧。非常感谢各位兄弟的提的意见,就每人给100分吧!问题的最终原因是因为SOCKET的缓冲引起。
 
后退
顶部