暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

IBM AIX svmon 简介之一

原创 eygle 2009-07-15
732
原文链接: 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


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论