ps或top命令可用于显示前面几个MEMORY占用较多的进程。如显示前5位MEMORY占用的进程:
[root@base0:/root ]$ps aux | sort -r -k 4 | head -6
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 10079 0.3 2.7 601m 67m ? S Mar11 22:42.12 monitorAgent
root 11691 1.6 0.5 17364 11m ? S Mar11 114:11.01 pm_client
root 10722 0.3 0.5 19416 11m ? S Mar11 3:37.21 sysmtc
root 7392 0.3 0.1 31140 3044 ? S Mar11 0:00.08 solid
root 1 0.0 0.0 2132 748 ? S Mar11 0:25.81 [init]
其中,第四列%MEM是内存占用率,VSZ是占用的虚拟内存,RSS是占用的物理内存,单位都是kB。
排序命令sort的几个参数:-r是倒转,由大到小;-n是不列抬头item;-k 4是以第四列%MEM为key来排列。
如果没有显示%MEM这一列,也可通过top再按M键来实现。如下所示。
[root@base0:/root ]$top (进入top后再按M)
top - 11:51:54 up 4 days, 11:11, 1 user, load average: 0.27, 0.37, 0.39
Tasks: 200 total, 1 running, 198 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.1%us, 0.6%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2543164k total, 1296080k used, 1247084k free, 7388k buffers
Swap: 0k total, 0k used, 0k free, 916580k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10079 root 20 0 601m 67m 4304 S 0.3 2.7 22:42.83 /usr/local/bin/monitorAgent
11691 root 20 0 17364 11m 5496 S 1.6 0.5 114:11.45 /usr/local/bin/pm_client
10722 root -2 -8 19416 11m 6200 S 0.3 0.5 3:37.44 /usr/local/bin/sysmtc -l 0:0:3:0:2:0 -a
7392 root 20 0 31140 3044 2572 S 0.3 0.1 0:00.08 /usr/local/bin/solid -c /opt/database/ -x file:db.ini
8336 root 20 0 2392 1080 768 R 0.7 0.0 0:00.27 top
1 root 20 0 2132 748 644 S 0.0 0.0 0:25.83 init [3]
2 root 20 0 0 0 0 S 0.0 0.0 0:00.23 [kthreadd]
用ps命令连续监控内存使用较高的前5位进程,shell脚本如下:
LOG_FILE=/tmp/memory_status.log
echo "Status of the five processes that has used most memory" >> "${LOG_FILE}"
while true; do
date >> "${LOG_FILE}"
ps aux | sort -r -k 4 | head -6 >> "${LOG_FILE}"
sleep 3
done