如何监控进程的内存使用情况(AIX)
AIX监控进程内存使用的工具比较多,个人觉得比较方便的有nmon,svmon,其中svmon是AIX自带的工具,需要root权限执行,可以监控进程详细内存使用信息,如:
svmon -P pid(要监控的进程PID) -i 1 (每秒刷新一次) |grep pid
# svmon -P 286756 -i 3|grep 286756
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB
286756 oracle 331561 65584 48 318241 Y N N
286756 oracle 331561 65584 48 318241 Y N N
AIX下进程内存分析
AIX下可以使用ps v工具或者svmon工具来分析进程内存。ps v命令是ps命令的一个工具,要注意的是v之前不要加"-"。ps v工具在任何AIX操作系统下都可以使用。比如:
# ps -lfp 13288
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
240001 A oracle 13288 1 0 60 20 1ba2f 34032 Nov 03 - 0:06 ora_pmon_DEV
# ps v 13288
PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND
13288 - A 0:08 225 5616 13904 32768 28420 13512 0.0 1.0 ora_pmon_DEV
从ps命令看到sz是34M。而用ps v命令可以看到rss是13904,TRS是13512。进程使用的内存是RSS-TRS=392K(ps v看到的内存单位是K)。
用svmon可以看到更多的信息,其结果和ps v是一致的。比如:
#svmon -P 23288
-------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd
23288 ora_pmon_V8 29598 1451 182 16560 N N
Vsid Esid Type Description Inuse Pin Pgsp Virtual AddrRange
1781 3 work shmat/mmap 11824 0 0 11824 0..24700
1761 1 pers code,large file /dev 9681 0 - - 0..9680
0 0 work kernel seg 3982 1450 182 3390 0..21804 :65474..65535
18018 d work shared library text 2852 0 0 158 0..65535
4764 2 work process private 1127 1 0 1127 0..1182 :65307..65535
f74f f work shared library data 81 0 0 61 0..1291
1e59e - pers large file /dev/lv00 33 0 - - 0..32
e58e - pers large file /dev/lv00 16 0 - - 0..82
b74b - pers large file /dev/lv00 1 0 - - 0..0
3703 - pers large file /dev/lv00 1 0 - - 0..0
#ps v 23288
PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND
23288 - A 0:00 0 4752 43556 32768 27289 38724 0.0 5.0 ora_pmon_V8
要注意的是,svmon显示的内存都是以Page为单位的,AIX下,每个页为4K。通过work process private的virtual大小和work shared library data的virtual大小的和ps v的SIZE是完全一致的:4752K=(1127+61)×4K
而RSS的内容相当于linux项目的private working-storage segments加上pers code和shared library data。
43556K = (1127 + 9681 + 81) * 4K
TRS就是INUSE项目的pers code: 38724K = 9681*4K
下面这几个命令组合对于管理RS/6000 AIX系统有帮助:
1 显示10个消耗CPU最多的进程
ps aux |head -1 ;ps aux |sort -rn +2 |head -10
2 显示前10个累计占用CPU时间的进程
ps -e|head -n 1;ps -e|grep -v "TIME|0:"|sort +2b -3 -n -r|head -n 10
3 显示前10个当前占用CPU时间的进程
ps -ef|head -n 1;ps -ef|grep -v "C|0:00"|sort +3b -4 -n -r|head -n 10
4 显示10个消耗内存最多的进程
ps vx |head -1 ;ps vx |grep -v PID |sort -rn +6 |head -10
5 显示10个换页最多的进程
ps vx |head -1 ;ps vx |grep -v PID |sort -rn +4 |head -10
6 显示10个消耗存储空间最多的进程
ps aux |head -1 ;ps aux |sort -rn +3 |head -10
7 按顺序显示系统中受罚的进程
ps -eakl |head -1 ;ps -eakl |sort -rn +5
8 按优先级顺序显示系统中的进程
ps -eakl |sort -n +6 |head
9 按处理时间为顺序显示系统中的前十个进程
ps vx |head -1 ;ps vx |grep -v PID |sort -rn +3 |head -10
10 按换入页面的多少顺序显示系统中的前10个进程
ps vx |head -1 ;ps vx |grep -v PID |sort -rn +4 |head -10