AIX的SVMON命令详解(原创)

svmon概述 

svmon 命令用于显示当前内存状态的信息,可通过

# lslpp bos.perf.tools 
查看是否有安装。因为 svmon 命令在启用中断的用户级别运行,所以显示的信息不组成真正的内存快照。 在非常繁忙的系统中,svmon收集的数据和真实的数据有所差距,在svmon进程搜集的过程中,VMM(虚存管理器)可能已经发生改动了。
因为svmon使用的全是VMM中的数据,而VMM对内存的视图是基于内存段的,所以,理解svmon的输出,必须先理解段的概念。

段 
段(segment)是一组页的合集, 用来报告内存消耗的基本对象。因此 svmon 所报告的统计信息是以页面表示的。 每个段为256M,而每页为4KB字节的虚存,每帧为4KB字节的实存,每个段可同时被多个进程使用,每个段属于以下五种类型其中的一种:
persistent:存放JFS文件或目录
working:进程数据区域和共享内存段
client:用于实现虚拟文件系统如NFS,CD-ROM文件系统和JFS2
mapping:用于实现文件和内存之间的映射关系
real memory mapping:用于对I/O空间的访问 
svmon参数详解

-a SupClassName 将范围限于 SupClassName 类参数的子类(在层报告 -T 中)。参数是超类名。不支持类列表。
-b 显示所有显示帧的引用和修改位的状态(详细报告 -D )。显示时,重新设置帧的引用位。使用 -i 标志时,会检测在每个间隔间存取的帧。

注:

因为该标志会影响性能,所以请谨慎使用。

-c 表示统计信息中只包含客户段。缺省情况下会分析所有段。
-C Command1 ...CommandN 显示运行命令名 Commandnm1 ...CommandnmN 的进程的内存使用统计信息。Commandnm 是字符串。它是可执行文件精确的基本名。
-d 对于给定实体,显示属于该实体(用户名或命令名)的进程的内存统计信息。
-D SID1 ...SIDN 显示段 SID1 ...SIDN 的内存使用统计信息和每个段所有帧的详细状态。指定的段标识符必须关于主段。
-e 显示 Class 参数的子类的内存使用统计信息(该参数在工作负载类报告-W 和层报告 -T 中)。-W 或 -a 类参数需要是超类名称。
-f 表示统计信息中只包含持久段(文件)。缺省情况下会分析所有段。
-F [ Frame1...FrameN ] 显示帧 Frame1...FrameN 状态,包含其所属的段。如果没有供应帧列表,那么会显示所用内存的百分比。
-g 表示要显示的信息按照在调页空间上保留或使用的页面总数的降序排列。这个标志结合段报告改变了排序列表末尾的非工作段。
-G 显示全局报告。
-i Interval [ NumIntervals ] 指示 svmon 命令重复显示统计信息。每个 Interval 秒就收集和打印统计信息。NumIntervals 是重复的次数;如果未指定,那么 svmon 一直运行到用户使用 Ctrl-C 中断为止。

注:

因为需要花费几秒来收集某些选项的统计信息,所以观察到的时间间隔可能比指定的时间间隔大。

-j 显示每个持久段引用的文件路径。

注:

因为该标志会对性能产生潜在的影响(特别是svmon -S ),所以请谨慎使用。

-l 每个显示的段都会显示使用段的进程标识符列表,并且根据报告类型显示进程所属的实体名(登录、命令、层或类)。对于特别的段,会显示标号而不是进程标识符列表。系统段显示标志为 system 的段的标号。未使用段此标号将显示所有的现有进程都未使用的段。例如,与文件相关的持久段不再使用。共享库文本显示包含共享库文本的段的标号,可能大部分进程都使用该共享库文本(例如,libc.a )。这将阻止显示进程的长列表。
-m 段映射源段时,显示关于源段的信息并映射段。缺省值是只显示关于映射段的信息。
-n 表示统计信息中只包含非系统段。缺省情况下会分析所有段。
-p 表示将要显示的信息按照带固定内存的页面总数降序排列。
-P [ PID1 ... PIDN ] 显示进程 PID1 ...PIDN 的内存使用统计信息。PID 是一个十进制的值。如果没有供应进程标识符(PID)列表,那么就会显示所有活动进程的内存使用统计信息。
-q 根据它们是否处理大页面而过滤结果。另外,它显示大页面度量值。
-r 显示已分配的段页面内的范围。因为页面可从两端开始然后向中间移动而得到分配,所以工作段可能具有两个范围。
-s 表示统计信息中只包含系统段。缺省情况下会分析所有段。
-S [ SID1 ...SIDN ] 显示段 SID1 ...SIDN 的内存使用统计信息。SID 是一个十六进制的值。指定的段标识符必须关于主段。如果没有供应段标识符(SID)列表,那么就会显示所有定义的段的内存使用统计信息。
-t Count 显示要打印的最高 Count 对象的内存使用统计信息
-T [ Tier1...TierN ] 显示所有层号 Tier1...TierN 的类的内存使用统计信息。如果没有供应层列表,那么就会显示所有定义的层的内存使用统计信息。
-u 表示要显示的信息按照实内存的页面总数降序排列。如果无下列标志出现,这就是缺省的排序标准:-p 、-g 和 -v 。
-U [ LogName1 ...LogNameN ] 显示登录名 LogName1 ...LogNameN 的内存使用统计信息。Logname是一个字符串,它是精确的登录名。如果没有提供登录标识符列表,那么就会显示所有定义的登录标识符的内存使用统计信息。
-v 表示要显示的信息按照虚拟空间的页面总数降序排列。这个标志结合段报告改变了排序列表末尾的非工作段。
-w 表示统计信息中只包含工作段。缺省情况下会分析所有段。
-W [ Clnm1 ...ClnmN ] 显示工作负载管理类 Clnm1 ...ClnmN 的内存使用统计信息。Clnm 是一个字符串。它是一个类的精确名称。对一个子类来说,名称应该具有superclassname.subclassname 的格式。如果没有提供类名列表,那么就会显示所有定义的类名的内存使用统计信息。
-x 显示层报告 -T 中对某个层的每个类的段的内存使用统计信息。
-z 显示在执行 svmon 过程中动态分配的最大内存大小。

具体使用范例 

1、全局统计信息

#svmon -G
                  size                  inuse          free             pin            virtual       mmode
memory      3932160     2729499     1202661      818627     1616925      Ded
pg space    8388608        8595

               work           pers        clnt       other
pin          675474          0        2801     140352
in use      1616925        0     1112574

PageSize    PoolSize       inuse        pgsp         pin            virtual
s    4 KB          -       1966891        8595      209571      854317
m   64 KB         -        47663           0            38066       47663 

其中

inuse-------已使用的

free---------空闲的

pin-----“钉”在内存中的内存段(笔者认为这不是固定内存段)

virtual-----虚拟内存段

work------工作内存段

pers-------固定内存段

other------- mapping和real mapping memory

PageSize-----不同内存页大小的统计情况,s为常规页面,大小为4k,m为大页面大小为64k。

pgsp------ 分页空间的使用情况
注意,在段的描述中,如果paging space使用的节中如果有一横(-),表明该段未使用交换区,work段可能使用交换区,但persistent段和client段不会使用交换区。
2、打印 1/2 小时中每分钟的全局统计信息,请输入:
#svmon -G -i 60 30

3、要打印出只考虑工作段的用户 root 和 steve 的内存使用统计信息,请输入:
#svmon -U root oracle -w

===============================================================================
User                                 Inuse      Pin     Pgsp  Virtual
oracle                              558293    16880        0   558293

     PageSize                Inuse        Pin       Pgsp    Virtual
     s    4 KB              515157         80          0     515157
     m   64 KB                2696       1050          0       2696

........................................................................................
SYSTEM segments             Inuse      Pin       Pgsp    Virtual
                                     13129     8552        0      13129

     PageSize                Inuse        Pin       Pgsp    Virtual
     s    4 KB                 3785       72          0       3785
     m   64 KB                584        530        0        584

    Vsid      Esid  Type  Description                 PSize  Inuse   Pin    Pgsp   Virtual
   20002      0    work  kernel segment              m     584    530     0       584
以上省略一部分输出。。。。

用户运行的进程所使用的段分成三个类别:
系统:所有进程共享的段
互斥:属于oracle 的进程集所使用的段
共享:几个用户共享的段。

其中

Vsid:表示虚拟段标识符。表示在虚拟内存管理器中的唯一段。

Esid: 表示有效的段标识符。Esid只有在段属于进程的地址空间时才有效。提供时,它表示进程如何使用段。如果 vsid 段被几个进程映射,但具有不同的 esid 值, 那么该字段包含“-”。如果是那样的话,那么通过应用于使用该段的每个进程标识符的 -P 标志,可以获得精确的 esid 值。因为用于管理打开的文件或多线程结构的段不是进程的用户地址空间的一部分,所以也对这些段显示“-”。

3、 可将使用实存最多的三个进程标出

# 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
4、 可将使用交换区最多的三个进程标出

# 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空间
5、 每隔三秒显示使用最多的段 
# 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的段使用最多
6、 看PID为22674的进程所使用的为固定内存 
#svmon -pP 22674  

7、要打印出段 700e 8811 和 bed7 的内存使用统计信息,请输入:
#svmon -S 700e 8811 bed7 1cf8e 

8、打印出命令 login ,ksh的内存使用统计信息, 包括地址范围,请输入:

#svmon -C login ksh -r 

9、要打印出只考虑非系统工作段的所有进程的内存使用统计信息,并且根据虚拟页面数对该进程排序,请输入:
#svmon -P -n -w -v

10、根据实内存的页数将系统段排序,并且打印出结果列表中最高的 10 个系统段,请输入:
#svmon -S -s -u -t 10 
11、只打印大页面段,请输入:
#svmon -S -q

常见问题分析 
svmon -S中inuse的求和结果比svmon -G中的inuse小 
下面的脚本可以用来统计svmon -S中的inuse的相加结果:
==============================================
#!/usr/bin/ksh
svmon -S | cut -c54-62 | awk '/^[-sLm]/ {if ($1 ~ /L/)
{COUNT1 =($2*4096+COUNT1)}
else if ($1 ~ /m/)
{COUNT2 =($2*16+COUNT2)}
else {COUNT3 =$2+COUNT3}}
END {printf "The result is as following with 4k as unit size\n16M page count=%d\n64k page count=%d\n4k page count=%d\nTatal page count=%d\n", COUNT1,COUNT2,COUNT3,'COUNT1+COUNT2+COUNT3'}'
========================================================
那么,产生这种差别的原因是什么呢?解释如下:
svmon -S用来显示系统中所有内存段(segment)的内存使用信息。AIX上仅存在三种内存段,它们是work,client和persistent。因此,统计svmon -S中inuse的和就是将被使用的上述三种内存段进行求和。但是,这种统计并没有将系统上所有的被使用的内存页面统计进来。系统里存在着一些尚未被VMM管理的内存页面(mapping和real mapping memory),这些页面已经被使用,但是不属于上述三种内存段,因此在svmon -S中体现不出来。而svmon -G则包含了这些未被管理的页面。
这些未被VMM管理的内存主要是被硬件使用,用来对物理内存做一些设置。在AIX 5L中,可以通过在kdb执行vmstat来查看未被管理的内存,输出如下:
VMM Memory Limits:
Total available memory (4K frames) : 00100000 4.0GB
Total unmanaged mem (wlm_hw_pages): 0000D639 214.3MB

4K number of frames : 000F29C7 3.8GB
4K frames pinned : 00009FEE 160.0MB
4K system pinnable frames remaining: 000B817E 2.9GB
4K user pinnable frames remaining : 000BC0BC 3.0GB

Free paging space (in 4K blocks) : 0001FD00 509.0MB
Paging space SIGDANGER level : 00001000 16.0MB
Paging space SIGKILL level : 00000400 4.0MB
其中“unmanaged mem”就代表这类未被VMM管理的内存页面

 

参考至:http://www.eygle.com/digest/2009/07/ibm_aix_svmon.html

http://www.kuqin.com/aixcmds/aixcmds5/svmon.htm#c013820260joy

http://www-900.ibm.com/cn/support/viewdoc/detail?DocId=2811998D15000

作者:czmmiao 原文地址:http://czmmiao.iteye.com/blog/1153499

时间: 2025-01-30 16:00:35

AIX的SVMON命令详解(原创)的相关文章

AIX的vmstat命令详解(原创)

vmstat概述  vmstat 命令报告关于内核线程.虚拟内存.磁盘.陷阱和 CPU 活动的统计信息.由 vmstat 命令生成的报告可以用于平衡系统负载活动.系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和. Interval 参数指定每个报告之间的时间量(以秒计).第一个报告包含系统启动后时间的统计信息.后续报告包含自从前一个报告起的时间间隔过程中所收集的统计信息.如果没有指定 Interval 参数,vmstat 命令生成单个报告然后退出.Count

AIX的sar命令详解(原创)

sar概述 sar 命令将 操作系统中选定的累计活动计数器的内容写到标准输出.基于 Number 和 Interval 参数的值,记帐系统以指定的时间间隔(以秒为单位)和指定间隔次数写入信息.Number 参数的缺省采样时间间隔为 1 秒.收集的数据也可以保存在由 -o File 标志所指定的文件中.   计算等待磁盘 I/O 所花费 CPU 时间(wio 时间)百分比的方法的改进. 在 AIX 4.3.2 及早期操作系统版本中采用的方法在某些情况下会在 SMP 上显示出夸大的 wio 时间.w

AIX的topas命令详解(原创)

topas概述  topas 命令报告选定的本地系统活动的统计信息.该命令使用 curses 库以合适的格式来显示其输出,该格式适合于在一个 80x25 基于字符的显示器上或至少同样大小的图形显示器的窗口中进行查看.topas 命令需要在系统中安装 perfagent.tools 文件集. 如果 topas 命令调用时没有标志,则运行时正如用以下命令行来调用:topas -d20 -i2 -n20 -p20 -w20 -c20  程序按由 monitoring_interval_in_secon

【OS】AIX之topas命令详解

[OS]AIX之topas命令详解 AIX基本命令topas简介 Posted on 2015 年 11 月 11 日 by xiaoyu 由于最近工作需要涉及到AIX主机.存储层面,就对这方面的内容做个简要的笔记,以供后续参考. topas命令利用System Performance Measurement Interface(SPMI) API获得有关信息,使系统开销保持最小程度,topas命令用于监控各种系统资源,比如cpu使用情况.内存和换页空间.磁盘性能.网络性能以及NFS统计信息等

VirtualBox下配置串口以及stty命令详解(原创)

虚拟机于主机通过串口通信  我们需要先配置一下宿主机器上的virtualbox. 1. 在串口栏中勾选 []启用串口(E) 2. 端口编号选择COM1 3. 端口模式选择Host Pipe 4. 勾选 []创建通道(C) 5. Port/File Path: 填上 /tmp/serial. 也就是说我们在宿主机器的/tmp/中创建了serial的通道文件 此外,我们还要在宿主机器上设定一下串口.在此之前需要安装minicom软件 1. 运行minicom -s命令 2. CTRL+A调出配置界面

dd命令详解(原创)

dd指令使用  语法格式 dd   [option]  dd指令选项详解 if=file:输入文件名,缺省为标准输入 of=file:输出文件名,缺省为标准输出 ibs=bytes:一次读入 bytes 个字节(即一个块大小为 bytes 个字节) obs=bytes:一次写 bytes 个字节(即一个块大小为 bytes 个字节) bs=bytes:同时设置读写块的大小为 bytes ,可代替 ibs 和 obs cbs=bytes:一次转换 bytes 个字节,即转换缓冲区大小 skip=b

AIX的/etc/filesystems详解(原创)

etc/filesystems概述 文件系统是一个完整的目录结构,包括根目录和他底下任何文件的目录,并且文件系统被限定在单一的逻辑卷上.在AIX上所有的文件系统信息/etc/filesystems 集中化的管理文件系统属性而存在,他的作用和Linux上的/etc/fstab文件类似. /etc/filesystems的常见属性 属性 描述 account 使用dodisk命令统计文件系统的详细信息,属性值为true或false.具体参加dodisk命令的用法 check 使用fsck命令来确认文

GPT和parted命令详解(原创)

GPT概述 全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构.它是可扩展固件接口标准的一部分,用来替代BIOS中的主引导记录分区表. 传统的主启动记录 (MBR) 磁盘分区支持最大卷为 2.2 TB (terabytes) ,每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器). 与MBR 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 千兆兆字节 (exabyte

find命令详解(原创)

概述 有时可能需要在系统中查找具有某一特征的文件(例如文件权限.文件属主.文件长度.文件类型等等).这样做可能有很多原因.可能出于安全性的考虑,或是一般性的系统管理任务,或许只是为了找出一个不知保存在什么地方的文件.find一个非常有效的工具,它可以遍历当前目录甚至于整个文件系统来查找某些文件或目录. 由于find具有如此强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统(NFS),find命令在该文件系统中同样有效,只要你具有相应的权限. 在运