方法一:
使用工具检测:
1.Coverity的检测报告
2.valgrind检查
方法二:
人工检查:
1,首先使用sar/top/free在系统级确定是否有内存泄露。如有,可以从top输出确定哪一个process。
2,pmap/top/ps工具是能帮助确定process是否有memory leak。确定memory leak的原则:
A)VIRT/VSZ或者writeable/private (‘pmap –d’输出)如果在做重复的操作过程中一直保持稳定增长,那么一定有内存泄露。
B) RSS只能作为参考,不能用来确定是否有内存泄露。
C) 在performance testing过程中,前面一段时间的内存增长不能用来确定内存泄露。因为最初系统需要申请一些内存来处理traffic。如果内存在短期就增长数G或者在系统稳定后还在持续增长,那就需要分析了。在我的工作中,一般前面半个小时的内存增长我都忽略。
E)多次申请分配的地址空间可能不连续。在virtual address中有多个[anon]段。 Here 1M was alloated to000000001b56a000 and00002ac25a77c000.
000000001b56a000 1156 12 12 rw--- [ anon ]
00002ac25a77c000 1040 16 16 rw--- [ anon ]