Shell脚本编程——监视内存占用最高的进程

    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


 

你可能感兴趣的:(Shell笔记)