我不是标题党,可我找不到别的更能描述问题而且简洁的标题。
情况是这样的:
开发了一个服务器,使用IOCP。似乎有内存泄漏。
进行压力测试,当服务器的连接全部释放,即处于完全空闲的时候,服务器的内存没有降到压力测试前的数目。
再做压力测试,内存继续升高。测试结束后内存比第一次测试结束后要高。
没做压力测试,内存都会上涨一些,降不下来。
这符合是内存泄漏的表象。
我用内存泄漏工具如Visual Leak Detector检测,没有报告泄漏。VLD通过记录new和delete来判断是否有泄漏。它说没有,说明new申请的内存都被delete释放了——确切地说,至少肯定在程序退出时释放了。
那么会是什么原因导致内存上涨呢?除了new之外,还有没有别的开销内存的东西?IOCP、socket....,会不会增加内存?每个使用的socket在不用后都会被close。
我观察到句柄数量又增加,不知道是不是有关系?
谢谢帮助。

解决方案 »

  1.   

    句柄如果一直递增也会有leak,用完了的handle记得要释放CloseHandle
      

  2.   

    我也怀疑可能是句柄问题。但不知道服务器里会有哪些句柄,怎么查句柄。
    已知的有IOCP和SOCKET 2类句柄。别的会有什么句柄?
    closesocket可以释放socket句柄是吗?
      

  3.   

    CreateXXX 产生的句柄,都应当调用CloseHandle释放
    如:CreateFile ,CreateEvent CreateThread 等
    具体的查看MSDN吧