Shell脚本编程——监控进程内存之pmap

    实用而简洁的命令总能给程序调试和问题分析带来极大的方便。有一个查看进程内存的命令,也许你的系统中已经拥有,那就是pmap。pmap命令可以报告某个或多个进程的内存使用情况,实际上是统计/proc/<pid>/maps数据。可以使用pmap 判断主机中哪个进程因占用过多内存导致内存瓶颈。注意,pmap监控的是虚拟内存。

    比如查看进程proc_mgr的内存使用详细状况:
root@base0:/root>ps -ef | grep proc_mgr
root      9389     1  0 15:02 ?        00:00:00 /usr/local/bin/proc_mgr -f
root     25249 16932  0 15:36 pts/0    00:00:00 grep pr
root@base0:/root> pmap 9389
9389:   /usr/local/bin/proc_mgr -f
08048000      8K r-x--  /usr/local/bin/proc_mgr
0804a000      4K rw---  /usr/local/bin/proc_mgr
0804b000    132K rw---    [ anon ]
b753a000      4K rw---    [ anon ]
b753b000   1292K r-x--  /lib/libc-2.5.so
b767e000      8K r----  /lib/libc-2.5.so
b7680000      4K rw---  /lib/libc-2.5.so
b7681000     12K rw---    [ anon ]
b7684000     76K r-x--  /lib/libpthread-2.5.so
b7697000      4K r----  /lib/libpthread-2.5.so
b7698000      4K rw---  /lib/libpthread-2.5.so
b7699000     12K rw---    [ anon ]
b769c000     44K r-x--  /lib/libgcc_s-4.1.2-20080825.so.1
b76a7000      4K rw---  /lib/libgcc_s-4.1.2-20080825.so.1
b76a8000    148K r-x--  /lib/libm-2.5.so
b76cd000      4K r----  /lib/libm-2.5.so
b76ce000      4K rw---  /lib/libm-2.5.so
b76cf000    888K r-x--  /usr/lib/libstdc++.so.6.0.8
b77ad000     12K r----  /usr/lib/libstdc++.so.6.0.8
b77b0000      8K rw---  /usr/lib/libstdc++.so.6.0.8
b77b2000     24K rw---    [ anon ]
b77b8000     24K r-x--  /lib/librt-2.5.so
b77be000      4K r----  /lib/librt-2.5.so
b77bf000      4K rw---  /lib/librt-2.5.so
b77c4000      4K rw---    [ anon ]
b77c5000      4K r-x--    [ anon ]
b77c6000    100K r-x--  /lib/ld-2.5.so
b77df000      4K r----  /lib/ld-2.5.so
b77e0000      4K rw---  /lib/ld-2.5.so
bfbcf000    132K rw---    [ stack ]
 total     2976K

    本进程占用的内存总共2976K。包含程序本身和相关的各个共享库。以ld-2.5.so为例,程序或共享库的各个部分解释如下:
b77c6000    100K r-x--  /lib/ld-2.5.so  //链接地址0xb77c6000,只读r和可执行x,说明是代码
b77df000      4K r----  /lib/ld-2.5.so     //只读r,说明是只读的字符串,虽然不多,但也要占用至少一个4k的页
b77e0000      4K rw---  /lib/ld-2.5.so   //可读r和可写w,说明是全局变量


    用pmap命令连续监控内存使用最高进程的详细内存使用状况,shell脚本如下:

LOG_FILE=/tmp/process_memory_status.log
echo "Memory status of the process using most memory" >> "${LOG_FILE}"
while true; do
    date >> "${LOG_FILE}"
    ps aux | sort -r -k 4 | head -6 >> "${LOG_FILE}"
    PID=$(ps aux | sort -nr -k 4 | head -1 | awk '{print $2}')
    pmap $PID >> "${LOG_FILE}"
    sleep 5
done


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值