您的位置:首页 > 运维架构 > Linux

Linux用户进程内存泄露一种检测方法

2011-03-10 01:31 736 查看
作者:夏斯华

像使用C/C++内存管理器不会帮我们自动回收不再使用的内存,如果忘记释放不再使用的内存而不能再被重用,就造成了所谓的内存泄露。
在Linux中,用户进程在/proc/{pid}/status文件中记录了该进程的内存使用实时情况。
*
VmSize:

虚拟内存大小。

整个进程使用虚拟内存大小,是VmLib, VmExe, VmData, 和 VmStk的总和。
* VmLck:

虚拟内存锁。

进程当前使用的并且加锁的虚拟内存总数
* VmRSS:

虚拟内存驻留集合大小。

这是驻留在物理内存的一部分。它没有交换到硬盘。它包括代码,数据和栈。
* VmData:

虚拟内存数据。

使用的虚拟内存。
* VmStk:

虚拟内存栈

使用的虚拟内存
* VmExe:

可执行的虚拟内存

可执行的和静态链接库所使用的虚拟内存
* VmLib:

虚拟内存库

动态链接库所使用的虚拟内存

我们可以写个脚本,把你关注的进程或者所有的进程(ps –ef),的内存使用情况,主要针对VmSize,VmData,VmStk三个方面每隔比如3小时记录到进程号对应的文件中,每次记录下一个的时候,做个比较,如果发现最后一个记录点比第一个记录点小无内存泄露,如果大还需要与第二个记录点的大小(排除系统启动时的内存增长需要时间稳定下来),如果大的话就说明有内存泄露。还有记录点不要太多,比如30个,超过了就删除除了第一个记录点外的倒数第二个老的记录点。检测出内存泄露,可以打到异常日志中,供查看。
我们需要去查看那日志,发现有泄露,会看是什么原因的,至少可以知道是哪个进程的以及是栈还是堆上的,然后再分析代码…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: