虚拟内存一直增加 但又没有内存溢出
我做了一个服务器,配置:8个CPU,4G内存 系统2003 标准版 虚拟内存设的是2G-4G
启动服务器占用内存2G,其中SQL 1.6G,程序占300M左右
但是程序启动后每天虚拟内存都增加200-300M(还有个奇怪的现象,如果不点击程序的运行窗口,那么它的内存也不断增加,点击后内存就和开始启动程序时的内存大小一样),直到总的内存 4G左右时程序就死掉了或者报不能连接数据库。
我怀疑是内存溢出,然后去用Visual Leak Detector来测试是否存在内存溢出,结果没有
请教各位大大这样的问题该怎么解决?解决了可以加分
[解决办法]
这个就是内存泄漏嘛,只不过有可能没有被检测出来,
BTW, 你的程序是用vc写的吗,如果不是的话,用vld能检测吗?
[解决办法]
你这个服务器干嘛的,应该是内存泄露了。
贴出来看看吧。
[解决办法]
内存溢出指申请的内存不够用,但强撑着压进去而使用了未知内存区域。
内存泄露是申请了内存使用毕继续占着位不做事。
[解决办法]
还有个奇怪的现象,如果不点击程序的运行窗口,那么它的内存也不断增加,点击后内存就和开始启动程序时的内存大小一样
没怎么看明白
不过应该是内存泄露,可以用操作系统自带的perfmon监测一下进程的private bytes/working sets/handle counts
[解决办法]
运行的程序存在内存泄漏,分配的资源没有释放,new对应的要delete malloc对应要free
可以用boundscheck等来检查一下代码
[解决办法]
可能是你运行循环的过程中不断的分配内存,所以内存增加,但是你最后结束程序的时候又全部都释放了.所以VLD检测不到.
你再看看你每次MainLoop的时候分配的内容吧.
[解决办法]
明显的内存泄露
工具检测不出来,可能是因为,这些内存在最后还是被释放了(比如把申请到的对象放到一个容器了,程序退出时释放了,其实不应该有这么多对象存在容器里)
这样的内存泄露工具就很难检测出来
[解决办法]
明显内存泄露 只是没检查出来
[解决办法]
mark
[解决办法]
mark
[解决办法]
你这个问题太可爱了,你要知道内存泄漏是不会报错的. 如果内存一直往上涨,你就应该查一下你自己的程序,看看是哪里造成的内存泄漏. 其实你可以让程序跑起来,注意观察.看看程序每当运行到哪个部分会使内存大付度增涨一次.然后就去跟跟代码,看看哪里忘记释放了.
[解决办法]
楼主介绍一下程序大概情况,有几个线程,是否使用第三方库等等。
先定位内存泄露在哪个线程。
[解决办法]
mrak