eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« IBM AIX netstat -p 命令使用输出详解 | 文摘首页 | IBM AIX Oracle 9i RAC 性能因素 - udp及其他 »

IBM AIX svmon 简介之一
modb.pro

原文链接: http://www-01.ibm.com/support/docview.wss?uid=csc1ef3e1dda91b04aa248256da4004c60fb

svmon命令是虚存的的监视命令,svmon可用于确定某个程序、用户、内存段使用实存或虚存的情况。它事实上调用的是svmon_back命令,在使用svmon命令之前,必须确定svmon_back命令可用,该命令位置为 /usr/lib/perf/svmon_back
svmon运行于前台,就象一个普通的用户进程一样,因为它在运行过程中可被中断,所以,它无法完全真正地成为内存使用情况的快照。所以,在非常繁忙的系 统中,svmon收集的数据和真实的数据有所差距,在svmon进程搜集的过程中,VMM(虚存管理器)可能已经发生改动了。
因为svmon使用的全是VMM中的数据,而VMM对内存的视图是基于内存段的,所以,理解svmon的输出,必须先理解段的概念。
段(segment)是一组页的合集,每个段为256M,而每页为4KB字节的虚存,每帧为4KB字节的实存,每个段可同时被多个进程使用,每个段属于以下五种类型其中的一种:
persistent:存放JFS文件或目录
working:进程数据区域和共享内存段
client:用于实现虚拟文件系统如NFS,CD-ROM文件系统和JFS2
mapping:用于实现文件和内存之间的映射关系
real memory mapping:用于对I/O空间的访问
注意,在段的描述中,如果paging space使用的节中如果有一横(-),表明该段未使用交换区,work段可能使用交换区,但persistent段和client段不会使用交换区。
下面举例说明使用命令可做的一些工作:
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   -   -
再利用ncheck命令,用户可自己建立脚本将device:inode信息抽取出来,如从上述的信息中,我们可通过ncheck得到输出:
/usr/java130/jre/lib/rt.jar
/usr/java130/jre/lib/fonts/LucidaSansRegular.ttf
/usr/java130/jre/lib/ext/indicim.jar
/usr/java130/jre/lib/ext/ibmjcaprovider.jar
/usr/java130/jre/lib/fonts/LucidaSansDemiBold.ttf
/usr/java130/jre/bin/java
脚本示例如下:
# expand -4 files.sh|nl
1 grep -p Vsid $1|
2 awk 'NR>1&&$0!~/^$/&&$4~/\/dev/{
3 l=substr($4,1,index($4,":")-1)
4 i=substr($4,index($4,":")+1)
5 if (l~/^\//)
6 print l,i
7 else {
8 print substr(l,index(l,",")+1),i
9 }
10 }'|
11 while read lv inode;do
12 fs=$(lsfs -c $lv 2>/dev/null|awk -F: 'NR>1{print $1}')
13 ncheck -i $inode $lv|awk '!/:$/{print lv $2}' lv=$fs
14 done



历史上的今天...
    >> 2007-07-10文章:

By eygle on 2009-07-10 17:52 | Comments (0) | 学习资料 | 2341 |


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com