微笑着面对每天,善待自己……

查看内存使用

上一篇 / 下一篇  2009-12-09 17:44:14 / 个人分类:技术

查看内存使用

操作系统的运行过程中,管理员常常需要了解系统内存的使用情况,并以此为依据来指导对系统性能的调优,使系统和应用程序运行在最佳的状态。查看内存使用,我们最常用的命令是 vmstat、ps 和 svmon。

使用 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 参数决定。

当一个应用程序终止时,它所有的工作页面会立即返回给空闲列表。然而,它的持久页面(或文件)仍然在 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 的值可以减少调页空间的页面调度量。

vmstat -I 命令

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

vmstat -s 命令

摘要选项 -s 向标准输出发送摘要报告,该报告从系统初始化开始,以绝对计数表示,而不是基于某个时间间隔。推荐使用该参数的方法是在有工作负载之前运行该命令,保存输出,在有工作负载后再次运行此命令,并保存输出。下一步就是确定两组输出间的差异。自动实现该操作的 awk 脚本名为 vmstatit,详细内容如下:

vmstat -s >temp.file   # cumulative counts before the command
time $1                # command under test
vmstat -s >>temp.file  # cumulative counts after execution
grep "pagi.*ins" temp.file >>results   # extract only the data
grep "pagi.*outs" temp.file >>results  # of interest


# 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)

显示帧的信息。不指定帧的号码时,会报告使用的内存的百分比。如果在系统上定义了一个大的页池,那么将报告大页内存使用百分比。而当指定了帧号时,会报告该帧的信息。

层(-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      lpage

pin           46041          0          0      20480

in use       129600     275195          0          0

 

             pgsize       size       free

lpage pool    16 MB          5          5

               size      inuse       free        pin    virtual
memory      1048576     425279     623297      66521     159195
pg space     262144      31995

 

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

             pgsize       size       free
lpage pool    16 MB          5          5

请注意,如果在系统上没有配置大页池,那么将不会显示大页池内存。
在示例中,总内存大小有 1048576 页。将这个数乘以 4096 就是总实内存的大小(以字节计)(4 GB)。
其中 425275 页正在使用,而空闲列表中有 623301 页,锁定在 RAM 中的有 66521 页。
在所有正在使用的页中,
              RAM 中有 129600 页工作页面,
              275195 页持久页面和
              0 页客户机页面。这三个部分
              (如果您包括大页,则为四个部分)的总和等于 memory 部分中 inuse 一栏的数值。
              pin 部分将锁定的内存大小划分为工作、持久、客户机以及 lpage(有时)四类。它们的和等于 memory 部分中的 pin 一栏的值。调页空间总共有 262144 页(1 GB),其中有 31995 页正在使用。memory 中的 inuse 一栏通常要比 pg space 中的 inuse 一栏要大,
             
              因为当一个程序完成后,文件页面占用的内存不会释放,而调页空间分配则会释放内存。

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

memory

描述实内存使用情况的统计信息,显示为 4KB 大小的页。

size

整个内存的大小,以 4KB 页计。

inuse

RAM 中进程使用的页数加上属于终止进程但仍驻留在 RAM 中的持久页面数。这个值等于总内存大小减去空闲列表中的页数。

free

空闲列表中页面的数量。

pin

锁定在 RAM 的页面的数量。(一个锁定的页面就是一直驻留在 RAM 中而不能调出的页面)。

virtual

在进程虚拟空间中分配的页数。

pg space

描述调页空间使用情况的统计信息,以 4KB 大小的页显示。该数据只有当不使用 -r 标志时才会报告。报告的值是所使用的实际调页空间页面数,这表明这些页面调出到了调页空间中。它与 vmstat 命令的不同在于 vmstat 命令的 avm 一栏显示的是已访问但不一定调出的虚拟内存。

size

总调页空间的大小,以 4KB 页计。

inuse

分配页的总数。

pin

包含锁定页面的实内存子集的详细统计信息,以 4KB 帧显示。

work

锁定在 RAM 中的工作页面的数量。

pers

锁定在 RAM 中的持久页面数量。

clnt

锁定在 RAM 中的客户机页面的数量。

lpage

只有当系统上配置了大页时才显示。用作锁定在 RAM 中的大页的 4 KB 页数。

in use

正在使用的实内存子集的详细统计信息,以 4KB 帧显示。

work

RAM 中工作页面的数量。

pers

RAM 中持久页面的数量。

clnt

RAM 中客户机页面的数量(客户机页面就是一个远程文件页面)。

lpage

只有当系统上配置了大页时才显示。用作锁定在 RAM 中的大页的 4 KB 页数。

lpage pool

只有当系统上配置了大页时才显示。关于大页内存池的详细统计信息。

pgsize

大页的大小,以兆字节(MB)计。

size

配置的大页数。

free

可供使用的大页数。


进程的内存使用情况

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

# svmon -P

-------------------------------------------------------------------------------

     Pid                         Command        Inuse        Pin      Pgsp  Virtual 64-bit Mthrd LPage

   16264 IBM.ServiceRM    10075     3345     3064    13310      N     Y     N

 

     PageSize      Inuse        Pin       Pgsp    Virtual

         4 KB      10075       3345       3064      13310

        16 MB          0          0          0          0

 

    Vsid      Esid Type Description              LPage  Inuse   Pin Pgsp Virtual

   f001e         d work shared library text          -   4857     0   36  6823

       0         0 work kernel seg                   -   4205  3335 2674  5197

   b83f7         2 work process private              -    898     2  242  1098

   503ea         f work shared library data          -     63     0   97   165

   c8439         1 pers code,/dev/hd2:149841         -     28     0    -     -

   883f1         - work                              -     21     8   14    26

   e83dd         - pers /dev/hd2:71733               -      2     0    -     -

   f043e         4 work shared memory segment        -      1     0    1     1

   c0438         - pers large file /dev/hd9var:243   -      0     0    -     -

   b8437         3 mmap mapped to sid a03f4          -      0     0    -     -

   583eb         - pers large file /dev/hd9var:247   -      0     0    -     -

 

-------------------------------------------------------------------------------

     Pid                         Command        Inuse        Pin      Pgsp  Virtual 64-bit Mthrd LPage

   17032 IBM.CSMAgentR     9791     3347     3167    12944      N     Y     N

 

     PageSize      Inuse        Pin       Pgsp    Virtual

         4 KB       9791       3347       3167      12944

        16 MB          0          0          0          0

 

    Vsid      Esid Type Description              LPage  Inuse   Pin Pgsp Virtual

   f001e         d work shared library text          -   4857     0   36  6823

       0         0 work kernel seg                   -   4205  3335 2674  5197

     400         2 work process private              -    479     2  303   674

   38407         f work shared library data          -    120     0  127   211

   a83f5         1 pers code,/dev/hd2:149840         -     99     0    -     -

   7840f         - work                              -     28    10   27    39

   e83dd         - pers /dev/hd2:71733               -      2     0    -     -

   babf7         - pers /dev/hd2:284985              -      1     0    -     -

   383e7         - pers large file /dev/hd9var:186   -      0     0    -     -

   e03fc         - pers large file /dev/hd9var:204   -      0     0    -     -

   f839f         3 mmap mapped to sid 5840b          -      0     0    -     -

[...]

该命令输出详细描述了每个进程的全局内存使用情况,以及每个报告的进程所使用的每个段的内存使用详细情况。缺省的排序规则是按照虚拟页计数的降序。您可以通过使用 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 LPage

   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 反映了用于访问相应页的段寄存器。还显示了段的类型及其描述,该描述为段的文本性描述,包括卷名以及持久段的文件索引节点。该报告还详细描述了段是否使用大页面 LPage、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              LPage  Inuse   Pin Pgsp Virtual

   f001e         d work shared library text          -   4857     0   36  6823
                   Addr Range: 0..60123
                   Shared library text segment
     400         2 work process private              -    480     2  303   675
                   Addr Range: 0..969 : 65305..65535
                   pid(s)=17032
   e83dd         - pers /dev/hd2:71733               -      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

LPage: N

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

如果页属于链接到被检查段的扩展段,则会显示该扩展段中的页索引。

以下是 svmon -b 命令的一个示例:

# svmon -b

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              LPage  Inuse   Pin Pgsp Virtual

   70c4e         - pers large file /dev/lv01:26      -  84625     0    -     -

   22ec4         - work                              -  29576     0    0 29586

   8b091         - pers /dev/hd3:123                 -  24403     0    -     -

   7800f         - work kernel heap                  -  22050  3199 19690 22903

   a2db4         - pers /dev/hd3:105                 -  15833     0    -     -

   80010         - work page frame. table             -  15120 15120    0 15120

   7000e         - work misc kernel tables           -  13991     0 2388 14104

   dc09b         - pers /dev/hd1:28703               -   9496     0    -     -

   730ee         - pers /dev/hd3:111                 -   8568     0    -     -

   f001e         - work                              -   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      lpage

pin           46053          0          0      20480

in use       121948     274946          0          0

 

             pgsize       size       free

lpage pool    16 MB          5          5

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 fre 列相接近。vmstat 命令报告的活动虚拟内存 avm 值与 svmon 命令报告的虚拟内存值接近。

svmon 和 ps 命令输出的相关性

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

# svmon -P 14706

 

-------------------------------------------------------------------------------

     Pid                         Command        Inuse        Pin      Pgsp  Virtual 64-bit Mthrd LPage

   14706 itesmdem          9067     3337     2833    12198      N     N     N

 

     PageSize      Inuse        Pin       Pgsp    Virtual

         4 KB       9067       3337       2833      12198

        16 MB          0          0          0          0

 

    Vsid      Esid Type Description              LPage  Inuse   Pin Pgsp Virtual

   f001e         d work shared library text          -   4857     0   36  6823

       0         0 work kernel seg                   -   4205  3335 2674  5197

   f039e         2 work process private              -      5     2   27    29

   b8397         3 work shared memory segment        -      0     0    1     1

   d039a         6 work shared memory segment        -      0     0    1     1

   c0398         4 work shared memory segment        -      0     0    1     1

   d839b         7 work shared memory segment        -      0     0    1     1

   e839d         f work shared library data          -      0     0   91   144

   c8399         5 work shared memory segment        -      0     0    1     1

    83a1         1 pers code,/dev/hd2:221359         -      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 是因为页面是以 4KB 为单位而 SIZE 是以 1KB 为单位的。如果一些工作段页当前被调出,这个数值将大于所使用的实内存量。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 页数有关,以 1KB 为单位。TRS 的值可能比 TSIZ 的值要大,因为其它页,如 XCOFF 头和载入程序区,可能包含在代码段里。

可以对提到的值进行下列计算:

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)

最小内存需求计算

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

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

其中:

T

= 文本页数(所有用户共享)

N

= 该程序同时运行的副本数

PD

= 进程私有段中的工作段数

LD

= 进程使用的共享库数据页数

F

= 文件页数(所有用户共享)

得到的结果乘以 4 就得到所需要的数值,以千字节计。您可能也希望将内核中的内核扩展和共享库文本段的值加到这个值上,即使它们是为系统中所有进程共享的。例如,一些如 CATIA 的应用程序和数据库使用很大的共享库模块。注意到由于我们只用了进程的单一快照的统计信息,不保证我们从公式得到的值就是正确的进程的最小工作集合的大小值。要获得工作集大小,须运行诸如 rmss 命令之类的工具或者在进程活动期间捕获大量快照,并从这些快照取平均值。详细内容,可参考 rmss 命令用法。


TAG:

 

评分:0

我来说两句

evergreen_wang

evergreen_wang

测试因仔

日历

« 2024-03-15  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 28354
  • 日志数: 52
  • 文件数: 6
  • 建立时间: 2009-06-17
  • 更新时间: 2011-05-31

RSS订阅

Open Toolbar