svmon 命令提供了一个更加深入的内存使用情况的分析。比起 vmstat 和 ps 命令,它带有更多信息量,并且更具有强制性。svmon 命令捕获一个当前内存状态的快照。然而,这并不是一个真正的快照,因为它运行在用户级别,即中断允许状态。
要确定 svmon 是否已安装并可用,运行以下命令:
# lslpp -lI bos.perf.tools
svmon 命令只能由 root 用户执行。
如果使用时间间隔(-i 项),统计信息将会一直显示直到命令被杀死或者直到达到了时间间隔的数值(可以刚好在该时间间隔后指定)。
可以使用下列不同的报告来分析所显示的信息:
全局(-G)
显示描述整个系统中实内存和调页空间的使用的统计信息。
进程(-P)
显示指定活动进程的内存使用情况。如果不提供进程列表,那么内存使用统计信息显示所有活动的进程。
段(-S)
显示指定段的内存使用情况。如果不提供段的列表,那么内存使用统计信息显示所有定义的段。
段的详细信息(-D)
显示指定段的详细信息。
用户(-U)
显示指定登录名的内存使用统计信息。如果不提供登录名列表,那么显示所有定义的登录名的内存使用统计信息。
命令(-C)
显示某个命令名指定的进程的内存使用统计信息。
工作负载管理类(-W)
显示指定的工作负载管理类的内存使用统计信息。如果不提供类,那么显示所有定义的类的内存使用统计信息。
帧(-F)
显示帧的信息。不指定帧的号码时,会报告使用的内存的百分比。仅考虑设置了访问位的帧。在处理期间,所有的访问位都将复位。因此,当第二次使用 -f 选项时,svmon 命令会报告自上次使用 -f 选项以来已访问的实内存的百分比。如果在系统上定义了一个保留池,那么将报告每个已定义池中使用的内存的百分比。
层(-T)
显示层的信息,例如层号,使用 -a 标志时的超类名和实内存中属于层的段的总页数。
下面举例说明使用命令可做的一些工作:
1、# svmon -uP -t 3|grep -p Pid|grep '^.*[0-9] '
可将使用实存最多的三个进程标出
5428 X 4681 1584 2656 9156 N N
16274 bin 4594 1588 2273 8824 N Y
6458 dtgreet 4660 1580 2144 8712 N N
输出的格式顺序为 Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd
可以计算出X程序所使用的实存为4681×4096=18763776,约为18MB
2、# svmon -gP -t 3|grep -p Pid|grep '^.*[0-9] '
可将使用交换区最多的三个进程标出,
5428 X 4681 1584 2656 9156 N N
16274 bin 4594 1588 2273 8824 N Y
6458 dtgreet 4660 1580 2144 8712 N N
第一个程序X所使用的交换区大小约为 2566×4096 =10510336 字节,大约为10MB空间
3、# svmon -S -t 3 -i 3
每隔三秒显示使用最多的段
Vsid Esid Type Description Inuse Pin Pgsp Virtual
4f08 - clnt 37505 0 - -
11e1 - clnt 33623 0 - -
8811 - work kernel pinned heap 12637 6547 8091 19397
可见,Vsid为4f08的段使用最多
4、svmon -pP 22674
看PID为22674的进程所使用的为那些文件
Pid Command nuse Pin Pgsp Virtual 64-bit Mthrd
22674 java 29333 1611 2756 32404 N Y
Vsid Esid Type Description Inuse Pin Pgsp Virtual
0 0 work kernel seg 2979 1593 1659 4561
a056 - work 43 16 3 46
1e03 2 work process private 77 2 17 93
1080 - pers /dev/hd2:69742 1 0 - -
f8bd f work shared library data 84 0 11 99
60ee 8 work shmat/mmap 0 0 0 0
70ec - pers /dev/hd2:69836 1 0 - -