Linux - 如何查看等待磁盘 IO 的内容

Ama*_*rus 46 linux io top

我有一台负载非常高的服务器。就 CPU 使用率而言,我没有任何反应,也没有交换。

我认为这是因为某些进程正在等待磁盘 IO,我想看看在等待什么。

是否有任何程序可以显示哪些进程正在等待 IO?我知道,iotop但这显示了当前正在执行 IO 的操作。

或者这是一个愚蠢的问题?(如果是这样解释如何:))

Ali*_*ani 54

您可以使用像 iotop 这样的 I/O 监视器,但它只会向您显示具有当前 I/O 操作的进程或线程。

如果您需要浏览等待 I/O 的进程,请使用 watch 监视带有 STAT 标志 'D' 的进程,如下所示:

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"
Run Code Online (Sandbox Code Playgroud)

  • 我会使用 `ps` 的 POSIX 标志并以不同的方式对其进行 `awk` 处理:`watch "(ps -eo stat,pid,comm|awk '(NR==1)||(\$1~/D/ ){print}')"` -- 这样你就可以得到列标题,以及 stat、pid 和 command。 (4认同)
  • 或者,您可以使用“iotop -o”命令,它只会根据 iotop --help 显示“实际执行 I/O 的进程或线程”。 (2认同)
  • @Ryan 除了_不_提供必要的“iowait”信息之外,“iotop”还需要提升权限。`watch`、`ps` 和 `awk` 只提供必要的信息,不需要提升权限。 (2认同)

Zan*_*hey 18

ps axu并查找处于“D”状态的进程。根据ps(1) 联机帮助页,处于 D 状态的进程处于不间断睡眠状态,这几乎总是意味着“等待 IO”。不幸的是,通常不可能杀死这些进程。


Kyl*_*ndt 17

Zanchey 的答案是我所知道的最好的答案,可以找出等待 IO 的内容。

当你说你的服务器负载很高时,你是什么意思?有什么特别反应迟钝?

如果你想知道你的磁盘 IO 是否是瓶颈,我会使用 iostat 命令(sysstat 包的一部分)来查看磁盘是否真的处于重负载下。

例子:

[kbrandt@kbrandt-opadmin: ~] iostat -x 1 3                                                                                           

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38   34.71    2.64    1.18    0.00   59.21 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.11    17.35    2.21   20.31    46.57   301.40    15.45     2.27  100.66   1.48   3.34
sda1              0.10    17.31    2.21   20.31    46.48   301.10    15.44     2.27  100.66   1.48   3.34
sda2              0.00     0.00    0.00    0.00     0.00     0.00     3.50     0.00   30.00  30.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00    18.44     0.00  677.67 512.61   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.22    0.00    4.31    0.00    0.00   89.47   
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
Run Code Online (Sandbox Code Playgroud)

  • 解释如何解释 iostat 的输出“以查看磁盘是否实际上处于重负载状态”会很有帮助。 (3认同)