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

pidstat 命令有点像 top 命令中的为每个 CPU 统计信息功能,但是它是以不断滚动更新的方式打印信息,而不是每次清屏打印 。这个对于观察随时间变化的模式很有用,同时把你看到的信息(复制粘贴)记到你的调查记录中 。
上面的例子可以看出是 2 个 java 进程在消耗 CPU 。%CPU 列是所有 CPU 的使用率;1591% 是说明这个 java 进程消耗了几乎 16 个 CPU 核 。
6. iostat -xz 1$ iostat -xz 1Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)avg-cpu:  %user   %nice %system %iowait  %steal   %idle          73.96    0.00    3.73    0.03    0.06   22.21Device:   rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %utilxvda        0.00     0.23    0.21    0.18     4.52     2.08    34.37     0.00    9.98   13.80    5.42   2.44   0.09xvdb        0.01     0.00    1.02    8.94   127.97   598.53   145.79     0.00    0.43    1.78    0.28   0.25   0.25xvdc        0.01     0.00    1.02    8.86   127.79   595.94   146.50     0.00    0.45    1.82    0.30   0.27   0.26dm-0        0.00     0.00    0.69    2.32    10.47    31.69    28.01     0.01    3.23    0.71    3.98   0.13   0.04dm-1        0.00     0.00    0.00    0.94     0.01     3.78     8.00     0.33  345.84    0.04  346.81   0.01   0.00dm-2        0.00     0.00    0.09    0.07     1.35     0.36    22.50     0.00    2.55    0.23    5.62   1.78   0.03[...]^C这个工具对于理解块设备(比如磁盘)很有用,展示了请求负载和性能数据 。具体的数据看下面字段的解释:

  1. r/s, w/s, rkB/s, wkB/s:这些表示设备上每秒钟的读写次数和读写的字节数(单位是 k 字节) 。这些可以看出设备的负载情况 。性能问题可能就是简单的因为大量的文件加载请求 。
  2. await:I/O 等待的平均时间(单位是毫秒) 。这是应用程序所等待的时间,包含了等待队列中的时间和被调度服务的时间 。过大的平均等待时间就预示着设备超负荷了或者说设备有问题了 。
  3. avgqu-sz:设备上请求的平均数 。数值大于 1 可能表示设备饱和了(虽然设备通常都是可以支持并行请求的,特别是在背后挂了多个磁盘的虚拟设备) 。
  4. %util:设备利用率 。是使用率的百分数,展示每秒钟设备工作的时间 。这个数值大于 60% 则会导致性能很低(可以在 await 中看),当然这也取决于设备特点 。这个数值接近 100% 则表示设备饱和了 。
如果存储设备是一个逻辑磁盘设备,后面挂载了多个磁盘,那么 100% 的利用率则只是表示有些 I/O 是在 100% 处理,然而后端的磁盘或许远远没有饱和,还可以处理更多的请求 。
请记住,磁盘 I/O 性能低不一定是应用程序的问题 。许多技术通常都被用来实现异步执行 I/O,所以应用程序不会直接阻塞和承受延时(比如:预读取和写缓冲技术) 。


推荐阅读