aix的内存使用

有几种性能工具可提供内存使用情况报告。最让人感兴趣的报告来自 vmstat、ps 和 svmon 命令。[@more@]

使用 vmstat 命令确定内存使用情况
vmstat 命令总结了系统中所有进程使用的总活动虚拟内存,以及空闲列表上实内存页帧的数量。活动的虚拟内存定义为虚拟内存中实际可以得到的工作段页面的数量。有关更详细的定义,请参阅『后页面空间分配』。这个数字可能大于机器中的实际页帧数,因为一些活动的虚拟内存页可能已写出到调页空间中。

当确定内存是否短缺或者是否需要进行某种内存调整时,在一组时间间隔里输入 vmstat 命令,检查结果报告中的 pi 和 po 列。这两列表明了每秒调页空间页面调入的数量和每秒调页空间页面调出的数量。如果这些值经常为非零值,说明可能存在内存瓶颈。偶尔出现的非零值不用在意,因为页面调度是虚拟内存的主要原理。

# vmstat 2 10
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 3 113726 124 0 14 6 151 600 0 521 5533 816 23 13 7 57
0 3 113643 346 0 2 14 208 690 0 585 2201 866 16 9 2 73
0 3 113659 135 0 2 2 108 323 0 516 1563 797 25 7 2 66
0 2 113661 122 0 3 2 120 375 0 527 1622 871 13 7 2 79
0 3 113662 128 0 10 3 134 432 0 644 1434 948 22 7 4 67
1 5 113858 238 0 35 1 146 422 0 599 5103 903 40 16 0 44
0 3 113969 127 0 5 10 153 529 0 565 2006 823 19 8 3 70
0 3 113983 125 0 33 5 153 424 0 559 2165 921 25 8 4 63
0 3 113682 121 0 20 9 154 470 0 608 1569 1007 15 8 0 77
0 4 113701 124 0 3 29 228 635 0 674 1730 1086 18 9 0 73
在上述示例输出中,请注意输出中的较高的 I/O 等待率以及阻塞队列中的线程数。其他 I/O 活动可能会造成 I/O 等待,但是在这种特殊情况下,I/O 等待最大可能是由于与页面空间之间的页面调进调出造成的。

要察看系统的 VMM 是否有性能问题,请检查 memory 和 page 下的列:

内存
提供了实际和虚拟内存的信息。

avm
活动虚拟内存 avm 列显示在收集 vmstat 样本时存在的活动虚拟内存页面数。缺省策略为延迟页面空间策略。在该策略下,avm 的值可能比使用的调页空间页面数要高。avm 统计信息并不包含文件页面。

fre
fre 列显示出空闲内存页面的平均数量。一个页面是实内存中的 4 KB 的区域。系统维护内存页面的缓冲区,称为空闲列表。当 VMM 需要空间时可以很方便地访问此空闲列表。VMM 在空闲列表上保存的最少页数由 vmo 命令的 minfree 参数决定。有关更多详细信息,请参阅『VMM 页面替换调整』。

当一个应用程序终止时,它所有的工作页面会立即返回给空闲列表。然而,它的永久页面(或文件)仍然在 RAM 中,不会添加回空闲列表中,直到由 VMM 窃取用于其他程序为止。如果删除相应的文件,也会释放其永久页面。

由于这个原因,fre 的值可能不表示进程可以方便使用所有实内存。如果需要页帧,那与已终止应用程序相关的永久页面将会最先移交给另一个程序。

如果 fre 的值远大于 maxfree 的值,那不太可能出现系统颠簸。系统颠簸意味着系统一直在进行页面调进调出。然而,如果系统正在经历抖动,可以肯定 fre 值很小。

页面
关于缺页故障和页面调度活动的信息。它们是一段时间间隔的平均值并以秒为单位给出。

re
注:
这一栏当前不受支持。
pi
pi 列详细描述了从调页空间调入的页数。调页空间是驻留在磁盘上的虚拟内存的一部分。当内存过量使用时,它用作溢出。调页空间由用于存储从实内存中窃取到的工作组页面的逻辑卷组成。当进程访问一个窃取页时,产生了一个缺页故障,这一页必须从调页空间读入内存。

因为硬件配置、软件和应用程序的不同,没有绝对的数字可以用以参考。这个字段作为调页空间活动的关键指示符。如果发生页面调进,该页面就一定有一个较早的页面调出。在内存受限的环境下也有可能每一次页面调进会迫使另一个页面被窃取而页面调出。

po
po 一栏显示了调出到调页空间的页面数(速率)。无论什么时候窃取工作存储器的一页,如果它仍未驻留在调页空间中或已被修改,那它会被写入调页空间。如果不被再次访问,它会留在页面调度设备中直到进程终止或放弃空间。如果包含在出故障页面中的后续地址引用导致缺页故障,那么这些页面将会由系统个别调进。当一个进程正常终止,任何分配给该进程的调页空间将被释放。如果系统读入大量的永久页面,您会发觉 po 栏里增加了而在 pi 栏里没有相应增加。这并不一定会造成系统颠簸,但可以保证对于应用程序数据存取模式的调查。

fr
在一定时间间隔内根据页面替换算法每秒所释放的页数。当 VMM 页面替换例程扫描页面帧表(Page Frame Table,PFT)时,它使用一些条件选取要窃取的页面以插入到可用内存帧的空闲列表中。该条件包含了两种页面,工作(计算的)和文件(永久的)页面。就因为页面已经释放,并不意味着发生了任何 I/O。例如,如果某个永久存储(文件)页面尚未修改,它就不会被写回磁盘。如果 I/O 不是必需的,则要求最小的系统资源来释放页面。

sr
在一定时间间隔内根据页面替换算法每秒所检查的页面数。页面替换算法在可以窃取足够的页面以满足页面替换线程的需要之前可能不得不扫描许多页面帧。sr 值比 fr 值高得越多,页面替换算法查找要窃取的合格页面就越困难。

cy
时钟算法中每秒的周期数。VMM 使用一种叫时钟算法的技术来选择要替换的页面。这种技术利用了每一个页面的访问位来指示哪些页最近曾被使用(访问)过。调用页面窃取程序例程时,它遍历整个 PFT,检查每一页的访问位。

cy 一栏显示了每秒页面替换代码扫描了 PFT 多少次。因为插入空闲列表可以不需要完全扫描 PFT,并且因为所有的 vmstat 字段报告为整数,这一字段通常为 0。

确定一个系统的适当 RAM 数量的一种方法是察看 avm 字段的最大值,该字段由 vmstat 命令报告。将该数字乘以 4K 得到字节数,然后将其与系统的 RAM 字节数比较。理想情况下,avm 应该比总 RAM 数小。如果不是,可能会出现一些虚拟内存页面调度量。有多少页面调度发生取决于两个值之间的差值。记住,虚拟内存的概念是提供给我们寻址大于实内存容量的能力(一些在 RAM 内存中,而另一些在调页空间中)。但是如果虚拟内存远大于实内存,可能造成过度的页面调度,从而导致延时。如果 avm 小于 RAM,那么当 RAM 中填满文件页时就会引起调页空间的页面调度。这种情况下,调整 minperm、maxperm 和 maxclient 的值可以减少调页空间的页面调度量。有关更多信息,请参阅『用 vmo 命令进行 VMM 页面替换调整』。

vmstat -I 命令
vmstat -I 命令显示其他信息,例如每秒调进的文件和每秒调出的文件(即不是调页空间调进或调页空间调出的所有 VMM 调进调出。使用这个标志不会报告 re 和 cy 栏。

vmstat -s 命令
摘要选项 -s 向标准输出发送摘要报告,该报告从系统初始化开始,以绝对计数表示,而不是基于某个时间间隔。推荐使用这些统计信息的方法是在有工作负载之前运行该命令,保存输出,在有工作负载后再次运行此命令,并保存输出。下一步是确定两组输出间的差异。自动实现该操作的 awk 脚本名为 vmstatit,在『确定问题是否与磁盘或内存有关』中提供。


# vmstat -s
3231543 total address trans. faults
63623 page ins
383540 page outs
149 paging space page ins
832 paging space page outs
0 total reclaims
807729 zero filled pages faults
4450 executable filled pages faults
429258 pages examined by clock
8 revolutions of the clock hand
175846 pages freed by the clock
18975 backtracks
0 lock misses
40 free frame waits
0 extend XPT waits
16984 pending I/O waits
186443 start I/Os
186443 iodones
141695229 cpu context switches
317690215 device interrupts
0 software interrupts
0 traps
55102397 syscalls
总结里的页面调进和页面调出的数量代表虚拟内存从页面空间和文件空间调进或调出页面的活动。调页空间的页面调进调出代表整个页面空间。

用 ps 命令确定内存使用情况
ps 命令也可以用来监视个别进程对内存的使用。ps v PID 命令为个别进程提供了最全面的内存相关统计信息的报告,例如:

缺页故障
工作段已经达到的大小
内存中工作段和代码段的大小
文本段的大小
驻留集的大小
进程使用的实内存的百分比
下面是一个例子:

# ps v
PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND
36626 pts/3 A 0:00 0 316 408 32768 51 60 0.0 0.0 ps v
结果 ps 报告中最重要的列描述如下:

PGIN
缺页故障引起的页面调进的数目。既然所有 I/O 归于缺页故障,那这主要就是 I/O 量的测量。
大小
进程数据区的虚拟大小(在调页空间),用千字节表示(在其他标志中用 SZ 来表示)。这个数目等于进程可用的工作段页的数目的 4 倍。如果一些工作段页当前被调出,这个数字将大于所使用的实内存量。SIZE 包含了私有段的页面和进程的共享库数据段。
RSS
进程实内存(驻留集合)的大小,用千字节表示。这个数值等于内存中的工作段页和代码段页数和的 4 倍。记住代码段页是为所有当前程序运行的实例所共享的。如果 26 个 ksh 进程正在运行,只有 ksh 可执行程序的任何给定页面的一份副本可位于内存中,但是 ps 命令会将代码段的大小作为每个 ksh 程序的实例的 RSS 的一部分报告。
TSIZ
文本(共享程序)映像的大小。这是可执行文件的文本区域的大小。可执行程序文本区的页面是只能在用到它们时带入内存的,就是说,转移到内存或从内存装入。这个数字只表明了可以装入的文本量的上限。TSIZ 的值并不反映实内存的使用情况。这个 TSIZ 值也可以通过对可执行程序执行 dump-ov 命令查看到(例如:dump -ov /usr/bin/ls)。
TRS
文本驻留集合(实内存)的大小。这个数目等于进程可用的代码段页的数目的 4 倍。当程序有多个运行实例时,这个数字夸大了内存的使用情况。TRS 的值可能比 TSIZ 的值要高是因为其他页可能包含在代码段中,例如 XCOFF 头文件和装入程序段。
%MEM
由内存中工作段和代码段页的和的 4 倍计算得到(即 RSS 的值),再除以机器实内存的大小(单位 KB),再乘以 100,四舍五入到最接近的百分点。这个值旨在表明了进程使用的实内存。但不巧的是,就像 RSS,它夸大了一个进程与其他进程共享程序文本的开销。而且,四舍五入到最接近的百分点,使得系统中所有 RSS 值小于 0.005 乘以数据内存大小的进程的 %MEM 值为 0.0。
注:
ps 命令并不表明共享内存段或者内存映像段消耗的内存。因为许多应用程序使用共享内存或内存映射段,svmon 命令是一个更好的查看这些段的内存使用情况的工具。
svmon 命令
svmon 命令提供了一个更加深入的内存使用情况的分析。比起 vmstat 和 ps 命令来说,它带有更多信息量,并且更具有强制性。svmon 命令捕获一个当前内存状态的快照。然而,这并不是一个真正的快照,因为它运行在用户级别,即中断允许状态。

要确定 svmon 是否已安装并可用,运行以下命令:

# lslpp -lI bos.perf.tools
svmon 命令只能由 root 用户执行。

如果使用时间间隔(-i 选项),统计信息将会一直显示直到命令被杀死或者直到达到了时间间隔的数值(可以刚好在该时间间隔后指定)。

可以使用下列不同的报告来分析所显示的信息:

全局(-G)
显示描述整个系统中实内存和调页空间的使用的统计信息。
进程(-P)
显示指定活动进程的内存使用情况。如果不提供进程列表,则内存使用统计信息显示所有活动的进程。
段(-S)
显示指定段的内存使用情况。如果不提供段的列表,则内存使用统计信息显示所有定义的段。
段的详细信息(-D)
显示指定段的详细信息。
用户(-U)
显示指定登录名的内存使用统计信息。如果不提供登录名列表,则显示所有定义的登录名的内存使用统计信息。
命令(-C)
显示某个命令名指定的进程的内存使用统计信息。
工作负载管理类(-W)
显示指定的工作负载管理类的内存使用统计信息。如果不提供类,则显示所有定义的类的内存使用统计信息。
帧(-F)
显示帧的信息。不指定帧的号码时,会报告使用的内存的百分比。仅考虑设置了访问位的帧。在处理期间,所有的访问位都将复位。因此,当第二次使用 -f 选项时,svmon 命令会报告自上次使用 -f 选项以来已访问的实内存的百分比。如果在系统上定义了一个保留池,则将报告每个已定义池中使用的内存的百分比。
层(-T)
显示层的信息,例如层号,使用 -a 标志时的超类名和实内存中属于层的段的总页数。
使用中的内存量
打印全局的统计信息,要用 -G 标志。在以下示例中,以一秒钟的时间间隔重复两次。

# svmon -G -i 1 2

size inuse free pin virtual
memory 1048576 425275 623301 66521 159191
pg space 262144 31995

work pers clnt
pin 46041 0 0
in use 129600 275195 0

PageSize PoolSize inuse pgsp pin virtual
s 4 KB - 404795 31995 46041 159191
L 16 MB 5 0 0 5 0
size inuse free pin virtual
memory 1048576 425279 623297 66521 159195
pg space 262144 31995

work pers clnt
pin 46041 0 0
in use 129604 275195 0

PageSize PoolSize inuse pgsp pin virtual
s 4 KB - 404799 31995 46041 159195
L 16 MB 5 0 0 5 0


请注意如果系统中只有 4 KB 的页面可用,则不显示细分每个页面大小的信息的段。

结果 svmon 报告中的列描述如下:

memory
描述实内存使用情况的统计信息,显示为 4 KB 大小的页。
size
整个内存的大小,以 4 KB 页计。
inuse
RAM 中进程使用的页数加上属于终止进程但仍驻留在 RAM 中的永久页面数。这个值等于总内存大小减去空闲列表中的页数。
free
空闲列表中页面的数量。
pin
固定在 RAM 的页面的数量。(一个固定的页面就是一直驻留在 RAM 中而不能调出的页面)。
virtual
在进程虚拟空间中分配的页数。
pg space
描述调页空间使用情况的统计信息,以 4 KB 大小的页显示。报告的值是所使用的实际调页空间页面数,这表明这些页面调出到了调页空间中。它与 vmstat 命令的不同在于 vmstat 命令的 avm 一栏显示的是已访问但不一定调出的虚拟内存。
size
总调页空间的大小,以 4 KB 页计。
inuse
分配页的总数。
pin
包含固定页面的实内存子集的详细统计信息,以 4 KB 帧显示。
work
固定在 RAM 中的工作页面的数量。
pers
固定在 RAM 中的永久页面数量。
clnt
固定在 RAM 中的客户机页面的数量。
in use
正在使用的实内存子集的详细统计信息,以 4 KB 帧显示。
work
RAM 中工作页面的数量。
pers
RAM 中永久页面的数量。
clnt
RAM 中客户机页面的数量(客户机页面就是一个远程文件页面)。
PageSize
仅在系统上大小不为 4 KB 的页面可用时显示。指定可以在系统上使用的每种页面大小各自的统计信息。
PageSize
页面大小
PoolSize
保留内存池中页面的数目。
inuse
已使用页面的数目
pgsp
调页空间中分配的页面的数目
pin
已固定页面的数目
virtual
系统虚拟空间中分配的页面的数目。
在示例中,总内存大小有 1048576 页。将这个数乘以 4096 就是总实内存的大小(以字节计)(4 GB)。其中 425275 页正在使用,而空闲列表中有 623301 页,固定在 RAM 中的有 66521 页。在所有正在使用的页中,RAM 中有 129600 页工作页面,275195 页永久页面和 0 页客户机页面。这三个部分的总和(加上已保留的但不一定由保留池使用的内存)等于 memory 部分中 inuse 一栏的值。pin 部分将固定内存大小分成工作页面、永久页面和客户机页面这三类。它们的和(加上由保留池保留的总是固定的内存)等于 memory 部分中 pin 一栏的值。调页空间总共有 262144 页(1 GB),其中有 31995 页正在使用。memory 中的 inuse 一栏通常要比 pg space 中的 inuse 一栏要大,因为当一个程序完成后,文件页面占用的内存不会释放,而调页空间分配则会释放内存。

进程的内存使用情况
svmon -P 命令显示了当前正在系统上运行的所有进程的内存使用统计信息。以下是 svmon -P 命令的一个示例:

# svmon -P

--------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB
16264 IBM.ServiceRM 10075 3345 3064 13310 N Y N

PageSize Inuse Pin Pgsp Virtual
s 4 KB 10075 3345 3064 13310
L 16 MB 0 0 0 0

Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
f001e d work shared library text s 4857 0 36 6823
0 0 work kernel seg s 4205 3335 2674 5197
b83f7 2 work process private s 898 2 242 1098
503ea f work shared library data s 63 0 97 165
c8439 1 pers code,/dev/hd2:149841 s 28 0 - -
883f1 - work s 21 8 14 26
e83dd - pers /dev/hd2:71733 s 2 0 - -
f043e 4 work shared memory segment s 1 0 1 1
c0438 - pers large file /dev/hd9var:243 s 0 0 - -
b8437 3 mmap mapped to sid a03f4 s 0 0 - -
583eb - pers large file /dev/hd9var:247 s 0 0 - -

--------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB
17032 IBM.CSMAgentR 9791 3347 3167 12944 N Y N

PageSize Inuse Pin Pgsp Virtual
s 4 KB 9791 3347 3167 12944
L 16 MB 0 0 0 0

Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
f001e d work shared library text s 4857 0 36 6823
0 0 work kernel seg s 4205 3335 2674 5197
400 2 work process private s 479 2 303 674
38407 f work shared library data s 120 0 127 211
a83f5 1 pers code,/dev/hd2:149840 s 99 0 - -
7840f - work s 28 10 27 39
e83dd - pers /dev/hd2:71733 s 2 0 - -
babf7 - pers /dev/hd2:284985 s 1 0 - -
383e7 - pers large file /dev/hd9var:186 s 0 0 - -
e03fc - pers large file /dev/hd9var:204 s 0 0 - -
f839f 3 mmap mapped to sid 5840b s 0 0 - -
[...]

该命令输出详细描述了每个进程的全局内存使用情况,以及每个报告的进程所使用的每个段的内存使用详细情况。缺省的排序规则是按照 Inuse 页面计数降序排列。您可以通过使用 svmon 命令与 -u、-p、-g 或 -v 标志来更改排序规则。

要获得系统上使用内存的前 15 个进程摘要,请使用以下命令:

# svmon -Pt15 | perl -e 'while(<>){print if($.==2||$&&&!$s++);$.=0 if(/^-+$/)}'
--------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB
16264 IBM.ServiceRM 10075 3345 3064 13310 N Y N
17032 IBM.CSMAgentR 9791 3347 3167 12944 N Y N
21980 zsh 9457 3337 2710 12214 N N N
22522 zsh 9456 3337 2710 12213 N N N
13684 getty 9413 3337 2710 12150 N N N
26590 perl5.8.0 9147 3337 2710 12090 N N N
7514 sendmail 9390 3337 2878 12258 N N N
14968 rmcd 9299 3340 3224 12596 N Y N
18940 ksh 9275 3337 2710 12172 N N N
14424 ksh 9270 3337 2710 12169 N N N
4164 errdemon 9248 3337 2916 12255 N N N
3744 cron 9217 3337 2770 12125 N N N
11424 rpc.mountd 9212 3339 2960 12290 N Y N
21564 rlogind 9211 3337 2710 12181 N N N
26704 rlogind 9211 3337 2710 12181 N N N

Pid 16264 是消耗内存最多的进程标识。Command 表示命令名,这里是 IBM?.ServiceRM。 Inuse 一栏显示 10075 页,它是进程使用的段在实内存中的总页数。每一页大小为 4 KB。Pin 一栏显示 3345 页,它是进程使用的段中固定的总页数。Pgsp 一栏显示 3064 页,它是进程使用的调页空间总页数。Virtual 一栏(进程虚拟空间中的总页数)显示 13310 页。

细节区域显示了摘要区域中显示的每个进程的每一段的信息。这包括虚拟 Vsid 和有效 Esid 段标识。Esid 反映了用于访问相应页的段寄存器。还显示了段的类型及其描述,该描述为段的文本描述,包括卷名以及永久段的文件索引节点。该报告还详细描述了支持段的页面的大小(其中 s 表示 4 KB 页面,L 表示 16 MB 页面)、RAM 中的页数 Inuse、RAM 中的固定页数 Pin、调页空间中的页数 Pgsp 以及虚拟页数 Virtual。

您甚至可以使用更多选项来获取更多详细信息。-j 选项显示永久段的文件的路径。-l 选项提供关于段的更多详细信息,-r 选项显示每个段使用的内存范围。以下是 svmon 命令带 -l、-r 和 -j 选项的示例:

# svmon -S f001e 400 e83dd -l -r -j

Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
f001e d work shared library text s 4857 0 36 6823
Addr Range: 0..60123
Shared library text segment
400 2 work process private s 480 2 303 675
Addr Range: 0..969 : 65305..65535
pid(s)=17032
e83dd - pers /dev/hd2:71733 s 2 0 - -
/usr/lib/nls/loc/uconvTable/ISO8859-1
Addr Range: 0..1
pid(s)=17552, 17290, 17032, 16264, 14968, 9620

Address Range 为永久段或者客户机段指定一个范围或者为工作段指定两个范围。永久段或者客户机段的范围用‘0..x’的形式来表示,其中 x 是已使用的虚拟页面的最大数目。工作段的字段范围可以是‘0..x : y..65535’,其中 0..x 包含了全局数据,会增大,而 y..65535 包含了堆栈区域,会减小。对于一个工作段的地址范围,是从两边开始分配空间直到中间。如果工作段是非私有的(内核或共享库),空间的分配是不同的。

在以上示例中,段标识 400? 是专用工作段;它的地址范围是 0..969 : 65305..65535。段标识 f001e 是共享库文本工作段;它的地址范围是 0..60123。

一个段可由多个进程使用。这样的段里的每一个实内存页解释了每个使用该段的进程的 Inuse 字段。因此,Inuse 的总数可能超过实内存中的页面总数。这对 Pgsp 和 Pin 字段同样适用。摘要部分中显示的值由进程使用的所有段的 Inuse、Pin、Pgsp 和 Virtual 计数器的总和组成。

在以上示例中,e83dd 段由若干进程使用,这些进程的 PID 是 17552、17290、17032、16264、14968 和 9620。

特定段标识的详细信息
-D 选项显示了段的内存使用的详细统计信息。

下面是一个例子:

# svmon -D 38287 -b
Segid: 38287
Type: working
PSize: s (4 KB)
Address Range: 0..484
Size of page space allocation: 2 pages ( 0,0 MB)
Virtual: 18 frames ( 0,1 MB)
Inuse: 16 frames ( 0,1 MB)

Page Frame Pin Ref Mod ExtSegid ExtPage
341 527720 N N N - -
342 996079 N N N - -
343 524936 N N N - -
344 985024 N N N - -
347 658735 N N N - -
348 78158 N N N - -
349 174728 N N N - -
350 758694 N N N - -
404 516554 N N N - -
406 740622 N Y N - -
411 528313 N Y Y - -
412 1005599 N Y N - -
416 509936 N N Y - -
440 836295 N N Y - -
443 60204 N N Y - -
446 655288 N N Y - -

各列的说明如下:

Page
指定段内页面的索引。
Frame
指定驻留在实内存的帧索引。
Pin
指定表示该页是否固定的标志。
Ref
仅用 -b 标志指定。指定表示该页的访问位是否有效的标志。
Mod
仅用 -b 标志指定。指定表示该页是否修改的标志。
ExtSegid
如果页属于链接到被检查段的扩展段,则会显示该段的虚拟段标识。
ExtPage
如果页属于链接到被检查段的扩展段,则会显示该扩展段中的页索引。
当扩展段链接到检查段时,报告类似于以下示例:

Page Frame Pin Ref Mod ExtSegid ExtPage
65574 345324 N N N 288071 38
65575 707166 N N N 288071 39
65576 617193 N N N 288071 40


-b 标志显示了所有显示的帧的访问和修改位的状态。显示之后,帧的访问位将被复位。当使用 -i 标志时,它检测每一个时间间隔内哪些帧可以访问。

注:
由于对性能会造成影响,请谨慎使用 -b 标志。
使用内存最多的段的列表
-S 选项用于按内存使用情况对段排序,并且显示指定段的内存使用统计信息。如果不提供段的列表,则内存使用统计信息显示所有定义的段。以下命令按实内存中的页数多少排列系统和非系统段。-t 选项可用于将显示的段数限制为指定的计数。-u 标志按实内存中的总页数降序排列输出。

下面是 svmon 命令带 -S、-t 和 -u 选项的示例输出:

# svmon -Sut 10

Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
70c4e - pers large file /dev/lv01:26 s 84625 0 - -
22ec4 - work s 29576 0 0 29586
8b091 - pers /dev/hd3:123 s 24403 0 - -
7800f - work kernel heap s 22050 3199 19690 22903
a2db4 - pers /dev/hd3:105 s 15833 0 - -
80010 - work page frame table s 15120 15120 0 15120
7000e - work misc kernel tables s 13991 0 2388 14104
dc09b - pers /dev/hd1:28703 s 9496 0 - -
730ee - pers /dev/hd3:111 s 8568 0 - -
f001e - work s 4857 0 36 6823

svmon 和 vmstat 命令输出的相关性
svmon 和 vmstat 的输出之间存在相关性。

下面是 svmon 命令的示例输出:

# svmon -G
size inuse free pin virtual
memory 1048576 417374 631202 66533 151468
pg space 262144 31993

work pers clnt
pin 46053 0 0
in use 121948 274946 0

PageSize PoolSize inuse pgsp pin virtual
s 4 KB - 397194 262144 46053 151468
L 16 MB 5 0 0 5 0

vmstat 命令在一个独立的窗口中运行,与此同时 svmon 也在运行。vmstat 的报告如下所示:

# vmstat 3
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 5 205031 749504 0 0 0 0 0 0 1240 248 318 0 0 99 0
2 2 151360 631310 0 0 3 3 32 0 1187 1718 641 1 1 98 0
1 0 151366 631304 0 0 0 0 0 0 1335 2240 535 0 1 99 0
1 0 151366 631304 0 0 0 0 0 0 1303 2434 528 1 4 95 0
1 0 151367 631303 0 0 0 0 0 0 1331 2202 528 0 0 99 0

全局 svmon 报告显示了相关的数字。vmstat 命令的 fre 列与 svmon 命令的 memory free 列相关。vmstat 命令报告的活动虚拟内存 avm 值与 svmon 命令报告的虚拟内存值接近。

svmon 和 ps 命令输出的相关性
svmon 和 ps 命令输出之间存在着一些联系。svmon 命令输出如下:

# svmon -P 14706

---------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB
14706 itesmdem 9067 3337 2833 12198 N N N

PageSize Inuse Pin Pgsp Virtual
s 4 KB 9067 3337 2833 12198
L 16 MB 0 0 0 0

Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual
f001e d work shared library text s 4857 0 36 6823
0 0 work kernel seg s 4205 3335 2674 5197
f039e 2 work process private s 5 2 27 29
b8397 3 work shared memory segment s 0 0 1 1
d039a 6 work shared memory segment s 0 0 1 1
c0398 4 work shared memory segment s 0 0 1 1
d839b 7 work shared memory segment s 0 0 1 1
e839d f work shared library data s 0 0 91 144
c8399 5 work shared memory segment s 0 0 1 1
83a1 1 pers code,/dev/hd2:221359 s 0 0 - -

将上述示例与下面的 ps 报告作比较:

# ps v 14706
PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND
14706 - A 0:00 16 692 20 32768 19 0 0,0 0,0 /usr/bin/

SIZE 值 328 与 svmon 命令的 Virtual 值相关,由 process private 值(59)加上 shared library data 值(23)得到,以 1 KB 为单位。这个数目等于进程已使用的工作段页的数目(即已分配的虚拟页的数目)的 4 倍。该数必须乘以 4 是因为页面是以 4 KB 为单位而 SIZE 是以 1 KB 为单位的。如果一些工作段页当前被调出,这个数值将大于所使用的实内存量。SIZE 值(692)与 Virtual 数字相关,该数字由 svmon 命令得到,对应于 process private(29)加上 shared library data(144),以 1 KB 为单位。

RSS 指的是进程实内存(驻留集合)的大小,用 KB 表示。这个数值等于内存中的工作段页和代码段页数和的 4 倍。记住代码段页是为所有当前程序运行的实例所共享的。如果 26 个 ksh 进程正在运行,只有 ksh 的可执行程序的任何给定页面的一个副本可以驻留在内存,但是 ps 命令会将代码段的大小作为每一个 RSS 的一部分报告,而该部分是 ksh 程序的一个实例。RSS 值(20)与 Inuse 数字相关,该数字由 svmon 命令得到,对应于进程的 process private 值(5 个工作存储段)、code,/dev/hd2:221359(0) 段以及 shared library data 值(0),以 1 KB 为单位。

TRS 值指的是驻留的文本集合(实内存)大小。这个数字等于代码段页数乘以 4。正如我们较早提到的,这个数目夸大程序正在运行多个实例的程序的内存使用。这不包括进程的共享文本。TRS 值(232)与 Inuse 列的 code 段(58)中的 svmon 页数有关,以 1 KB 为单位。TRS 的值可能比 TSIZ 的值要大,因为其他页,如 XCOFF 头和载入程序区,可能包含在代码段里。

可以使用以下等式来计算 SIZE、RSS 和 TRS 值:

SIZE = 4 * Virtual of (work lib data + work private)
RSS = 4 * Inuse of (work lib data + work private + pers code)
TRS = 4 * Inuse of (pers code)
以上的 svmon 命令示例只显示了 4 KB 的页面。如果使用其他页面大小,则当您计算 SIZE、RSS 和 TRS 值时应该考虑该页面大小。

最小内存需求计算
用以计算程序的最小内存需求的公式如下:

总内存页数(以 4 KB 为单位)= T + ( N * ( PD + LD ) ) + F
其中:

T
= 文本页数(所有用户共享)
N
= 该程序同时运行的副本数
PD
= 进程私有段中的工作段数
LD
= 进程使用的共享库数据页数
F
= 文件页数(所有用户共享)
得到的结果乘以 4 就得到要求的数值,以千字节计。您可能也希望将内核中的内核扩展和共享库文本段的值加到这个值上,即使它们是为系统中所有进程共享的。例如,一些如 CATIA 的应用程序和数据库使用很大的共享库模块。注意到由于我们只用了进程的单一快照的统计信息,不保证我们从公式得到的值就是正确的进程的最小工作集合的大小值。要获得工作集大小,须运行诸如 rmss 命令之类的工具或者在进程活动期间捕获大量快照,并从这些快照取平均值。有关更多信息,请参阅『使用 rmss 命令进行内存需求评估』。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/271063/viewspace-903427/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/271063/viewspace-903427/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值