在测试过程中,如何判断设备是否存在内存泄漏和排插,精准定位出是哪个进程造成的内存泄漏,很主要,是测试日常的必备技能。
排查步骤如下:
1、sar -r 。平时测试使用sar -r ,查看系统整体的内存情况,看kbmemused(已使用的内存总量)。一定在稳定性环境观察,如果值变大那就是内存使用率变大,内存没有得到释放,造成内存泄漏。
# 查看今天的内存使用历史(每10分钟一个采样点)
sar -r
# 查看指定时间段(如上午9点到10点)
sar -r -s 09:00:00 -e 10:00:00
# 实时查看(每秒刷新一次)
sar -r 1
2、ps aux。确认占用内存从高到低排序找到前10个占用最多的进程。通过写一个简单的脚本,间隔 1小时记录一次内存 TOP 10,观察 %MEM 和 RSS 这两个值看变化就够了,看其是否持续增长。
[root@00b342000817 ~]# ps aux --sort=-%mem | head -20
3、差值法。前面两个法子都没法排插出是谁造成内存泄漏的话,使用第三种方法。思路:使用ps aux列出所有进程对应占用的进程标记为时间1,之后过段时间2再记录各个进程的内存使用数量,之后计算出各个进程的使用差值之后除以原先时间1的使用进程情况,乘以100%,就可以得出谁的进程增长速率最快,最后使用ps aux来对增长数据最多的前十个来进行隔断时间获取占用进程的情况是否持续增长不释放内存,谁后面增长最明显最快,谁就是造成内存泄漏的罪魁祸首。(使用自动化按照这个流程就可以做判断)