获取进程使用内存情况的方法

作者: qiaoyongdv 2009-06-04 10:54:08
获取进程内存使用情况

使用pmap命令可以观察到系统中指定进程的地址空间分布情况。具体语法为:
pmap -d pids
如查看httpd的信息,其进程号为12552
pmap -d 12552 系统会显示如下信息:(在此我做了删减,只保留开始与结尾部分)
12552: /usr/sbin/httpd
Address Kbytes Mode Offset Device Mapping
00111000 76 r-x-- 0000000000000000 0fd:00000 libaprutil-0.so.0.9.4
00124000 4 rw--- 0000000000013000 0fd:00000 libaprutil-0.so.0.9.4
00125000 132 r-x-- 0000000000000000 0fd:00000 libm-2.3.4.so
00146000 4 r---- 0000000000020000 0fd:00000 libm-2.3.4.so
00147000 4 rw--- 0000000000021000 0fd:00000 libm-2.3.4.so
00148000 44 r-x-- 0000000000000000 0fd:00000 liblber-2.2.so.7.0.6
00153000 4 rw--- 000000000000b000 0fd:00000 liblber-2.2.so.7.0.6
00c02000 8 r-x-- 0000000000000000 0fd:00000 mod_vhost_alias.so
00c04000 4 rw--- 0000000000001000 0fd:00000 mod_vhost_alias.so
00c2d000 8 r-x-- 0000000000000000 0fd:00000 libcom_err.so.2.1
00c2f000 4 rw--- 0000000000001000 0fd:00000 libcom_err.so.2.1
09959000 2720 rw--- 0000000009959000 000:00000 [ anon ]
b7cbb000 56 rw-s- 0000000000000000 000:00006 zero (deleted)
b7cc9000 504 rw-s- 0000000000000000 000:00006 zero (deleted)
b7d47000 260 rw--- 00000000b7d47000 000:00000 [ anon ]
b7d89000 260 rw--- 00000000b7d89000 000:00000 [ anon ]
b7dca000 100 rw-s- 0000000000000000 000:00006 zero (deleted)
b7de3000 4 r---- 00000000028a0000 0fd:00000 locale-archive
b7de4000 2048 r---- 0000000000000000 0fd:00000 locale-archive
b7fe4000 24 rw--- 00000000b7fe4000 000:00000 [ anon ]
bff2a000 856 rw--- 00000000bff2a000 000:00000 [ stack ]
ffffe000 4 ----- 0000000000000000 000:00000 [ anon ]
mapped: 22868K writeable/private: 6296K shared: 660K

上述输出结果中,Mode位标记为s的即为共享内存大小,标记为p的即为私有内存大小,在最后会全面统计结果,供程序员调试使用。

具体参数解释如下:
Address:进程所占的地址空间
Kbytes 该虚拟段的大小
Locked 是否允许swapped
Mode 权限:r=read, w=write, x=execute, s=shared, p=private
Mapping: bash 对应的映像文件名

另外用ps -aux 命令也是可以得出内存使用情况,观察其输出结果中:
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
此两个字段即可以得出每个进程内存使用情况。

直接到/proc/pids目录下查看此相关进程的所有信息
如:cat maps

cat status

cat task

等依据调试需求查看使用。

相关资讯