vmstat

使用此命令来提供关于系统的多项统计信息。 vmstat 命令报告有关运行和等待队列中的内核线程、内存页面调度、中断、系统调用、上下文切换和 CPU 活动的统计信息。

CPU 活动是对用户方式、系统方式、空闲时间和磁盘 I/O 等待的百分比细分。

此命令的常规语法为:
vmstat  <time_between_samples_in_seconds> <number_of_samples> -t
典型输出看起来类似于:
kthr     memory             page              faults        cpu        time
----- ----------- ------------------------ ------------ ----------- --------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa hr mi se
 0  0 45483   221   0   0   0   0    1   0 224  326 362 24  7 69  0 15:10:22
 0  0 45483   220   0   0   0   0    0   0 159   83  53  1  1 98  0 15:10:23
 2  0 45483   220   0   0   0   0    0   0 145  115  46  0  9 90  1 15:10:24
在此输出中,请查找:
  • r(运行队列)和 b(已阻止)开始增加,尤其是超过 10。 此增大通常表示您有太多进程在竞争 CPU。
  • pipo(页入/页出)列中的值非零,可能指示您正在进行分页并且需要更多内存。 对于一些 JVM 实例,堆栈大小可能设置得过大。
  • 与进程数相比,cs(接触开关)非常高。 您可能必须通过 vmtune 来调优系统。
  • 在 cpu 部分中,us(用户时间)指示在程序中花费的时间。 假定 Java™ 是 tprof 中列表中的第一个,您需要调整 Java 应用程序。 在 cpu 部分中,如果 sys(系统时间)高于期望的值,并且您仍有 id(空闲)时间剩余,那么可能存在锁争用。 检查 tprof 以查找内核时间中与锁相关的调用。 您可能要尝试 JVM 的多个实例。
  • -t 标志,它在行结尾处添加每个样本的时间。