原文链接: 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
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1894次阅读
2025-04-09 15:33:27
【DBA坦白局】第一期:在小城市和一线城市做DBA,是“躺”还是“卷”?
墨天轮编辑部
1311次阅读
2025-04-10 14:17:22
Oracle Concepts(Oracle 19c):07 SQL
Ryan Bai
1011次阅读
2025-04-09 10:57:11
2025年3月国产数据库大事记
墨天轮编辑部
872次阅读
2025-04-03 15:21:16
Oracle数据库常用的78个脚本,速来下载!
陈举超
689次阅读
2025-03-27 12:27:50
2025 DBA 薪资观察:做 DBA 还香吗?
墨天轮编辑部
636次阅读
2025-04-24 15:53:21
Oracle DBA 高效运维指南:高频实用 SQL 大全
Lucifer三思而后行
631次阅读
2025-03-28 21:52:03
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
605次阅读
2025-04-10 15:35:48
月薪快6万的DBA,有命干不一定有命花
多明戈教你玩狼人杀
560次阅读
2025-04-18 10:36:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
550次阅读
2025-04-15 17:24:06