原文:http://czmmiao.iteye.com/blog/1153499

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

(转)AIX的SVMON命令详解的更多相关文章

  1. AIX topas命令详解

    本文转载于:AIX topas命令详解 topas命令默认2秒更新一次 一.topas命令以区域形式表现系统各项指标性能,如下图: 1. CPU:反应CPU性能区域,如果有多个 CPU,按 c 键两次 ...

  2. Topas命令详解

    Topas命令详解 执行topas命令后如图所示: #topas 操作系统的最全面动态,而又查看方便的性能视图就是topas命令了,下面以topas输出为例,对AIX系统的性能监控做简要描述,供运维工 ...

  3. db2常用命令(详解)大全

    近一年来在项目开发中使用到了IBM的DB2 9.1的数据库产品,跟Oracle相比一些命令有很大的区别,而它最大的功能是支持      xml存储.检索机制,通过XPath进行解析操作,使开发人员免于 ...

  4. Linux lsof命令详解和使用示例【转】

    所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接 ...

  5. [转帖]dd命令详解

    dd命令详解 https://czmmiao.iteye.com/blog/1748748 之前一直对linux的命令很恐惧 现在发现 其实不是那么复杂 要仔细学习就可以了 比如 dd = disk ...

  6. lsof命令详解(转)

    lsof命令详解(转) 上一篇 / 下一篇  2011-06-09 21:56:41 / 个人分类:Linux 查看( 351 ) / 评论( 0 ) / 评分( 0 / 0 ) 在Linux中,ls ...

  7. 转 linux之sed命令详解

    http://jingyan.baidu.com/article/fec4bce2228f60f2618d8bb0.html sed  编辑裁剪文件命令 sed -i "s/\/db\/te ...

  8. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  9. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

随机推荐

  1. Linux驱动框架之misc类设备驱动框架

    1.何为misc设备 (1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于 杂散设备,也就是misc设备,例如像a ...

  2. redis cluster 使用中出现的问题

    问题一 redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException: Too many Cluster redirectio ...

  3. Objective-C 学习笔记(二) 函数

    Objective-C 函数 定义一个方法 在Objective-C编程的方法定义的一般形式如下: - (return_type) method_name:( argumentType1 )argum ...

  4. Python学习-5.Python的变量与数据类型及字符串的分割与连接

    在Python中,变量类型是固定的,一旦声明就不能修改其类型(在Python里感觉不应该用声明,而应该用使用) 正确: var = 1 print(var) var = 2 print(var) 依次 ...

  5. GPS模块输出的NMEA数据ddmm.mmmm转换成dd.ddddd并在google Earth Pro中描点

      GPS模块输出的数据是NMEA格式,其中GPGGA字段包含我们需要的经纬度信息. 例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,12 ...

  6. VMware虚拟机无法启动,提示“无法打开磁盘,未能锁定文件”

    VMware在进入linux时,提示:无法打开磁盘 F:\Debian\Debian linux2.6.x kernel.vmdk 或者某一个快照所依赖的磁盘原因: 未能锁定文件 问题出现的原因:虚拟 ...

  7. C#基础之流程控制语句详解

    C#程序的执行都是一行接一行.自上而下地进行,不遗漏任何代码.为了让程序能按照开发者所设计的流程进行执行,必然需要进行条件判断.循环和跳转等过程,这就需要实现流程控制.C#中的流程控制包含了条件语句. ...

  8. Proxy account failing to run SSIS Error (Proxy (11) is not allowed for subsystem "SSIS" and user "AB\testuser ".

    USE [msdb]EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSISProxyAgentV1', @login_name=N'WTC\E ...

  9. css细节复习笔记——浮动

    CSS除了能够改变字体.背景和所有其他属性,还能够完成基本布局任务. div+css通过浮动和定位.盒子模型等技术应用,是最常用的布局方式. 定位的基本思想很简单,它允许定义元素框相对于其正常位置应该 ...

  10. CSS链接的样式a:link,a:visited,a:hover,a:active

    a :link(未被访问)a:hover(鼠标悬停)a:visited(访问过:真正到达那个页面)a:active(鼠标点击与释放之间.对无href属性的a对象无作用) 这几个元素,定义CSS时候的顺 ...