如何60秒内分析Linux性能( 二 )

对虚拟内存统计的简短展示,vmstat 是一个常用工具(最早是几十年前为 BSD 创建的) 。它每一行打印关键的服务信息统计摘要 。
vmstat 使用参数 1 来运行的时候,是每 1 秒打印一条统计信息 。在这个版本的 vmstat 中,输出的第一行展示的是自从启动后的平均值,而不是前一秒的统计 。所以现在,可以跳过第一行,除非你要看一下抬头的字段含义 。
每列含义说明:

  1. r: CPU 上的等待运行的可运行进程数 。这个指标提供了判断 CPU 饱和度的数据,因为它不包含 I/O 等待的进程 。可解释为:“r” 的值比 CPU 数大的时候就是饱和的 。
  2. free:空闲内存,单位是 k 。如果这个数比较大,就说明你还有充足的空闲内存 。“free -m” 和下面第 7 个命令,可以更详细的分析空闲内存的状态 。
  3. si,so:交换进来和交换出去的数据量,如果这两个值为非 0 值,那么就说明没有内存了 。
  4. us,sy,id,wa,st:这些是 CPU 时间的分解,是所有 CPU 的平均值 。它们是用户时间,系统时间(内核),空闲,等待 I/O 时间,和被偷的时间(这里主要指其它的客户,或者使用 Xen,这些客户有自己独立的操作域) 。
CPU 时间的分解可以帮助确定 CPU 是不是非常忙(通过用户时间和系统时间累加判断) 。持续的 I/O 等待则表明磁盘是瓶颈 。这种情况下 CPU 是比较空闲的,因为任务都由于等待磁盘 I/O 而被阻塞 。你可以把等待 I/O 看作是另外一种形式的 CPU 空闲,而这个命令给了为什么它们空闲的线索 。
系统时间对于 I/O 处理来说是必须的 。比较高的平均系统时间消耗,比如超过了 20%,就有必要进一步探索分析了:也有可能是内核处理 I/O 效率不够高导致 。
在上面的例子中,CPU 时间几乎都是用户级别的,说明这是一个应用级别的使用情况 。如果 CPU 的使用率平均都超过了 90% 。这不一定问题;可以使用 “r” 列来检查使用饱和度 。
4. mpstat -P ALL 1$ mpstat -P ALL 1Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)07:38:49 PM  CPU   %usr  %nice   %sys %iowait   %irq  %soft  %steal  %guest  %gnice  %idle07:38:50 PM  all  98.47   0.00   0.75    0.00   0.00   0.00    0.00    0.00    0.00   0.7807:38:50 PM    0  96.04   0.00   2.97    0.00   0.00   0.00    0.00    0.00    0.00   0.9907:38:50 PM    1  97.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   2.0007:38:50 PM    2  98.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   1.0007:38:50 PM    3  96.97   0.00   0.00    0.00   0.00   0.00    0.00    0.00    0.00   3.03[...]这个命令分打印各个 CPU 的时间统计,可以看出整体 CPU 的使用是不是均衡的 。有一个使用率明显较高的 CPU 就可以明显看出来这是一个单线程应用 。
5. pidstat 1$ pidstat 1Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)07:41:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command07:41:03 PM     0         9    0.00    0.94    0.00    0.94     1  rcuos/007:41:03 PM     0      4214    5.66    5.66    0.00   11.32    15  mesos-slave07:41:03 PM     0      4354    0.94    0.94    0.00    1.89     8  JAVA07:41:03 PM     0      6521 1596.23    1.89    0.00 1598.11    27  java07:41:03 PM     0      6564 1571.70    7.55    0.00 1579.25    28  java07:41:03 PM 60004     60154    0.94    4.72    0.00    5.66     9  pidstat07:41:03 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command07:41:04 PM     0      4214    6.00    2.00    0.00    8.00    15  mesos-slave07:41:04 PM     0      6521 1590.00    1.00    0.00 1591.00    27  java07:41:04 PM     0      6564 1573.00   10.00    0.00 1583.00    28  java07:41:04 PM   108      6718    1.00    0.00    0.00    1.00     0  snmp-pass07:41:04 PM 60004     60154    1.00    4.00    0.00    5.00     9  pidstat^C


推荐阅读