Linux 这个现象是内存泄漏吗?

C语言 码拜 10年前 (2015-05-11) 3078次浏览 0个评论

用top看程序使用的RSS, 随着处理次数的增加,RSS会一直增大

检查过程序都有内存释放处理,没有什么遗漏的

想问一下,RSS一直增加一定是内存泄露吗?
如果是,有什么方法可以检测出,
检测一定要用专用的工具吗

谢谢。

10分

循环调用疑似泄露的代码, 如果有内存泄露, 效果很明显。

20分
RSS增长不一定是内存泄露
RSS:该进程占用的物理内存的总数量,单位是KB。
进程占用的内存首先体现在虚拟内存上,如果进程访问到某个内存的时候,才会给他分配真实的物理内存。当然物理内存是有限的,如果增长到限制的最大值,那就不会再增长了,这时候不增长也不能说没有内存泄露
是否真的有内存泄露,可以运行的时间延长,观察进程占用的内存是否确实一直增长
内存泄露检测工具是一种辅助手法,能够帮助程序员检测出肉眼不易观察的内存泄露,但是也不能完全依赖
10分
内存泄露调试工具很多,valgrind比较有名
引用 2 楼 hnwyllmm 的回复:

RSS增长不一定是内存泄露
RSS:该进程占用的物理内存的总数量,单位是KB。
进程占用的内存首先体现在虚拟内存上,如果进程访问到某个内存的时候,才会给他分配真实的物理内存。当然物理内存是有限的,如果增长到限制的最大值,那就不会再增长了,这时候不增长也不能说没有内存泄露。
是否真的有内存泄露,可以运行的时间延长,观察进程占用的内存是否确实一直增长
内存泄露检测工具是一种辅助手法,能够帮助程序员检测出肉眼不易观察的内存泄露,但是也不能完全依赖

先纠正一下,不是RSS, 是RES。

程序的处理顺序 :接收到命令后分配内存,启动子线程,运行后再关掉子线程,最后释放内存。
每次接收到命令后RES都会增大,即使释放内存后也不会减少,而是随着运行的次数增加而持续增大
这个有问题吗?

引用 3 楼 wangzuxi 的回复:

内存泄露调试工具很多,valgrind比较有名

谢谢,我会下载来试用一下。

引用 4 楼 Kende0120 的回复:
Quote: 引用 2 楼 hnwyllmm 的回复:

RSS增长不一定是内存泄露
RSS:该进程占用的物理内存的总数量,单位是KB。
进程占用的内存首先体现在虚拟内存上,如果进程访问到某个内存的时候,才会给他分配真实的物理内存。当然物理内存是有限的,如果增长到限制的最大值,那就不会再增长了,这时候不增长也不能说没有内存泄露。
是否真的有内存泄露,可以运行的时间延长,观察进程占用的内存是否确实一直增长
内存泄露检测工具是一种辅助手法,能够帮助程序员检测出肉眼不易观察的内存泄露,但是也不能完全依赖

先纠正一下,不是RSS, 是RES。

程序的处理顺序 :接收到命令后分配内存,启动子线程,运行后再关掉子线程,最后释放内存。
每次接收到命令后RES都会增大,即使释放内存后也不会减少,而是随着运行的次数增加而持续增大
这个有问题吗?

如果是RES的话,是不是可能用了第三方的内存库,或者内存池,内存并没有释放,因此内核并没有释放对应的物理内存,反而运行时间久了还会增加


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Linux 这个现象是内存泄漏吗?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!