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。 pi或po(页入/页出)列中的值非零,可能指示您正在进行分页并且需要更多内存。 对于一些 JVM 实例,堆栈大小可能设置得过大。- 与进程数相比,
cs(接触开关)非常高。 您可能必须通过 vmtune 来调优系统。 - 在 cpu 部分中,
us(用户时间)指示在程序中花费的时间。 假定 Java™ 是 tprof 中列表中的第一个,您需要调整 Java 应用程序。 在 cpu 部分中,如果sys(系统时间)高于期望的值,并且您仍有id(空闲)时间剩余,那么可能存在锁争用。 检查 tprof 以查找内核时间中与锁相关的调用。 您可能要尝试 JVM 的多个实例。 - -t 标志,它在行结尾处添加每个样本的时间。