使用 vmstat 命令确定内存使用情况

vmstat 命令总结了系统中所有进程使用的总活动虚拟内存,以及空闲列表上实内存页帧的数量。

活动的虚拟内存定义为虚拟内存中实际可以得到的工作段页面的数量。 这个数字可能大于机器中的实际页帧数,因为一些活动的虚拟内存页可能已写出到调页空间中。

当确定系统内存是否短缺或者是否需要进行某种内存调整时,在设定的时间间隔内运行 vmstat 命令,并检查结果报告中的 pipo 列。 这两列表明了每秒调页空间页面调入的数量和每秒调页空间页面调出的数量。 如果这些值经常为非零值,说明可能存在内存瓶颈。 偶尔出现的非零值不用在意,因为页面调度是虚拟内存的主要原理。
# 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 是否有性能问题,请检查 memorypage 下的列:

  • 内存

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

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