unix 看内存_服务器内存查看unix内存占用率 - CSDN
  • unix查看内存使用

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

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

    使用 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 中充满持久文件页时也会引起调页空间的页面调度。这种情况下,调整 minpermmaxpermmaxclient 的值可以减少调页空间的页面调度量。

    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 命令提供了一个更加深入的内存使用情况的分析。比起 vmstatps 命令来说,它带有更多信息量,并且更具有强制性。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

    请注意,如果在系统上没有配置大页池,那么将不会显示大页池内存。

    结果 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

    可供使用的大页数。

    在示例中,总内存大小有 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 -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

                       AddrRange: 0..60123

                       Shared library text segment

         400         2 work process private              -    480     2  303   675

                       AddrRange: 0..969 : 65305..65535

                       pid(s)=17032

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

                            /usr/lib/nls/loc/uconvTable/ISO8859-1

                       AddrRange: 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

    AddressRange: 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 命令输出的相关性

    svmonvmstat 的输出之间存在相关性。

    下面是 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 命令输出的相关性

    svmonps 命令输出之间存在着一些联系。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 命令用法。

     

    转载于:https://www.cnblogs.com/ericli/articles/4248355.html

    展开全文
  • unix下查看内存使用

    2020-07-29 14:18:58
    讲解常用的unix内存查看方法,学习和使用unix用户的比精内容之一
  • 查看cpu 1、aix和hp上面: lsdev -C | grep Process | wc -l lscfg |grep proc lsattr -El proc0 lscfg |grep mem lsattr -El mem0 2、solaris上面: psrinfo -v | grep "Status of processor...用psrin
    查看cpu

    1、aix和hp上面:
    lsdev -C | grep Process | wc -l

    lscfg |grep proc lsattr -El proc0

    lscfg |grep mem lsattr -El mem0

    2、solaris上面:
    psrinfo -v | grep "Status of processor" | wc -l

    用psrinfo(1M)就可以查看。由于多内核/多线程技术的广泛采用,要查出物理CPU的数目可以使用-vp参数,例如:

    # psrinfo -vp
    The physical processor has 32 virtual processors (0-31)
    UltraSPARC-T1 (cpuid 0 clock 1000 MHz)

    UltraSPARC-T1的CPU共有8内核,每内核4个线程,因此如果单用-v参数看到的CPU数目是32个,而不是1个。

    3、linux上面
    cat /proc/cpuinfo | grep processor | wc -l

    查看内存

    1、在hp/ux上面
    root 用户可以用sam 和 mstm ,非root用户可以用:cat /var/adm/syslog/syslog.log|grep Physical
    2、在aix上面
    lsdev -C | grep mem
    lsattr -El mem0 lsattr -E -l sys0 -a realmem

    查看虚拟内存

    lsps -a


    3、在solaris上面
    prtconf | grep -i mem
    4、在linux上面
    free

    查看操作系统的位数:

    在solaris上面:如何查看系统内核是32位的还是64位的?

    isainfo -b isainfo -v

    在hpux上面:#/bin/getconf KERNEL_BITS

    在aix上面:bootinfo -y

    关于solaris的faq:

    http://wiki.gceclub.sun.com.cn/index.php/OpenSolaris/Solaris%E4%B8%AD%E6%96%87FAQ

    aix上是否开启aio:

    lsdev -Cc aio

    展开全文
  • (1)ps 命令查看: gb@gb-virtual-machine:/proc/19204$ ps -O sz,rsz,vsz 19204  PID SZ RSZ VSZ S TTY TIME COMMAND 19204 78192 1004 312768 S ? 00:00:00 ./memcached -

    (1)ps 命令查看:

    gb@gb-virtual-machine:/proc/19204$ ps -O sz,rsz,vsz 19204
      PID       SZ       RSZ    VSZ       S TTY          TIME COMMAND
    19204  78192  1004   312768 S ?            00:00:00 ./memcached -p 11211 -m 3096m -d


    ps命令是Linux下常见的查看进程状况的程序,它有几个字段可以用来查看 进程内存使用情况:sz,rss,vsz。分别说明如下:

    • sz:进程映像所占用的物理页面数量,也就是以物理页面为单位表示的虚拟内存大小;
    • rss:进程当前所占用的物理内存大小,单位为kB;
    • vsz:进程的虚拟内存大小,单位为kB,它等于sz乘于物理页面大小(x86平台通常为4kB)。

    上面的例子中,虚拟内存占用312768KB,实际占用物理内存为 1004 KB,物理页面数量为 78192 ,这里有 78192   * 4K = 312768 

    (2)用/proc文件系统查看占用内存情况:

    通过/proc/<pid>/status可以查看进程的内存使用情况,包括虚拟内 存大小(VmSize),物理内存大小(VmRSS),数据段大小(VmData),栈的大小 (VmStk),代码段的大小(VmExe),共享库的代码段大小(VmLib)等等。

    gb@gb-virtual-machine:/proc/19204$ cat /proc/19204/status
    Name:   memcached
    State:  S (sleeping)
    Tgid:   19204
    Ngid:   0
    Pid:    19204
    PPid:   1
    TracerPid:      0
    Uid:    1000    1000    1000    1000
    Gid:    1000    1000    1000    1000
    FDSize: 64
    Groups: 4 24 27 30 46 108 124 1000 
    VmPeak:   312768 kB
    VmSize:   312768 kB
    VmLck:         0 kB
    VmPin:         0 kB
    VmHWM:      1004 kB
    VmRSS:      1004 kB
    VmData:   304052 kB
    VmStk:       136 kB
    VmExe:       108 kB
    VmLib:      2280 kB
    VmPTE:        72 kB
    VmSwap:        0 kB
    Threads:        6
    SigQ:   0/31457
    SigPnd: 0000000000000000
    ShdPnd: 0000000000000000
    SigBlk: 0000000000000000
    SigIgn: 0000000000001001
    SigCgt: 0000000180000002
    CapInh: 0000000000000000
    CapPrm: 0000000000000000
    CapEff: 0000000000000000
    CapBnd: 0000001fffffffff
    Seccomp:        0
    Cpus_allowed:   f
    Cpus_allowed_list:      0-3
    Mems_allowed:   00000000,00000001
    Mems_allowed_list:      0
    voluntary_ctxt_switches:        2315
    nonvoluntary_ctxt_switches:     0

    这里 VmRSS:      1004 kB为占用物理内存大小,虚拟内存大小为: VmSize:   312768 kB



    展开全文
  • 查看Unix/Linux的CPU个数和内存大小,系统位数

    一、AIX

    1.查看CPU数:

    1 smtctl AIX5.3起,对于power5的机器,系统引入了SMTSimultaneousmulti-threading)的功能,其允许两个处理线程在同一颗处理器上运行,对操作系统而言,一颗物理处理器逻辑上会成为两个处理单元(逻辑处理器)。SMT功能启用:逻辑cpu个数是物理cpu个数的两倍,SMT功能禁用:逻辑cpu个数与物理cpu个数相等。

    2 bindprocessor -q 查看逻辑cpu个数

    3vmstat  查看逻辑cpu

    4prtconf  查看物理cpu

    5lsdev -Cc processor 查看物理cpu

    6lscfg |grep proc lsattr -El proc0 lscfg |grep mem lsattr -El mem0

    2.查看mem大小

    1lsdev -C | grep mem
    2lsattr -El mem0 lsattr -E -l sys0 -a realmem

    3.查看虚拟内存

       lsps -a

    4.查看系统位数

    硬件:bootinfo -y

    操作系统:bootinfo -K

    二、HP-UNIX

    1.查看cpu

    1echo runningprocs/D | adb -k /stand/vmunix /dev/mem
    2sar -M 1 1|awk 'END {print NR-5}'
    3ioscan -fnk |grep processor |wc -l

    4machinfo

    5lscfg |grep proc lsattr -El proc0 lscfg |grep mem lsattr -El mem0

    6psrinfo -v | grep "status of processor" |wc -l

    7ioscan -fnCprocessor

    2.查看内存

    1dmesg | grep -i physical

    2sam

    3)非root用户可以用:cat /var/adm/syslog/syslog.log|grep Physical

    3.查看系统位数

    print_manifest
    三、LINUX

    1.查看cpu

    1cat   /proc/cpuinfo processor=逻辑cpu数物;不重复physical id =物理cpu

    2.查看内存

    1cat /proc/meminfo
    2free
    3top

    3.查看系统位数

    getconf LONG_BIT

     

    展开全文
  • hp unix内存查询命令

    2010-09-28 16:02:00
     工作中需要查看一台hp unix的服务器内存,查找资料找到之后,记录下来和大家分享。  cat /var/adm/syslog/syslog.log |grep Physical
  • UNIX共享内存总结

    2010-10-01 16:32:00
    共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。...
  • hpux 下查看内存的的大小的几种方法:   # /opt/ignite/binpa/print_manifest|grep Memory NOTE: Could not read the /etc/resolv.conf file.  Main Memory: 1024 MB   # /...
  • UNIX内存占用基本检查

    2005-06-01 17:39:00
    UNIX内存占用基本检查1: 使用top指令. top指令是按cpu占用率排序的,如果想一次获得所有进程的快照,使用命令top -n [最大进程数] -f 输出到文件,比如top -n 1000 -f topsnapshot.log top指令输出内存的统计信息包括...
  • 程序和内存的概念   程序是指在硬盘上的可执行文件。当程序被运行时,需要将可执行文件加载到内存,在内存中的可执行文件形成进程,一个进程(文件)可以同时存在多个进程(内存)。   内存区域的划分   运行...
  • 一、mallc/free简化实现上篇文章已经讲解了动态内存分配/释放函数,参看:UNIX再学习 – 内存管理 下面来讲一下,它的自定义函数实现,其中有三个部分:1、内存控制块内存控制块用于管理每次分配的内存块,记录该...
  • 理解这个概念以前需要理解几个问题 ...4. 内存也是被划为一个个大小固定的页,程序装入内存后也不是占据连续的页,并且程序也不是完全加载进内存当中 5. 操作系统是多任务的,每个任务都是在执行一定时
  • 服务器unix下 进过ps -eF 查看 有很多 gdm都是sleep状态,不并且这些gdm进程占用内存很大,都是很久之前的。也不知道能不能kill强制杀掉。 重启之后,这些进程就没有了,内存也释放了。不重启一直占用内存不释放是...
  • Unix内核态也称管态(Windows称内核模式)和用户态也称目态(Windows称用户模式)...而Unix稍显复杂,他把程序的内存分为正文段和数据段,然后用一个PCB块(进程控制块)来指明各部分内存存放地址。正文段式程序是可再
  • 查看HP-UX主机内存

    2016-12-23 15:12:48
    第二步:这时候可以一下帮助,看看能用哪些,我就懂了一个tab 回车 然后使用方向键,将光标移动到performance monitor 回车 然后使用方向键,将光标切换至System Properties回车 然后使用Tab键...
  • 虚拟内存:所以新近的unix都提供一种有用的抽象叫虚拟内存。虚拟内存作为一种逻辑层,处于应用程序的内存请求与硬件内存管理单元之间,虚拟内存有很多用途和特点: 若干个进程可以并发的执行; 应用程序所需内存...
  • It's more a question of design, than speed (Shared Memoryisfaster), domain sockets are definitively more UNIX-style, and do a lot less problems. In terms of choice know beforehand:Domain ...
  • C 语言部分,就一再的讲内存管理,参看:C语言再学习 -- 再论内存管理 UNIX、Linux 部分还是要讲,足见其重要。
  • IPC形式除了管道、FIFO、信号量以外,还有共享内存区和消息队列。这里主要堆共享内存进行介绍。 共享内存区是可用IPC形式中最快的。一旦这样的内存区映射到共享它的进程地址空间,这些进程间数据的传递就不再涉及...
  • HP unix 没有像Aix 有nmon,但HPunix 有glance,但比起 nmon 易用性就差一些了,但glance 支持adviser模式, 所以此次利用glance的adviser模式,把监控的信息输出到文本,留下记号,方便大家使用; 1 . adviser 配置...
1 2 3 4 5 ... 20
收藏数 269,395
精华内容 107,758
关键字:

unix 看内存