Amandasaurus Asked: 2009-09-03 05:32:22 +0800 CST2009-09-03 05:32:22 +0800 CST 2009-09-03 05:32:22 +0800 CST Linux - 我如何查看等待磁盘 IO 的内容 772 我有一台负载非常高的服务器。就 CPU 使用率而言,没有什么让我大吃一惊,也没有交换。 我认为这是因为某些进程正在等待磁盘 IO,我想看看在等待什么。 是否有任何程序可以告诉我哪些进程正在等待 IO?我知道,iotop但这显示了当前正在做什么 IO。 或者这是一个愚蠢的问题?(如果是这样解释如何:)) linux io top 4 个回答 Voted Best Answer Ali Mezgani 2009-09-03T06:00:18+08:002009-09-03T06:00:18+08:00 您可以使用 iotop 之类的 I/O 监视器,但它只会显示具有当前 I/O 操作的进程或线程。 如果您需要浏览等待 I/O 的进程,请使用 watch 监视带有 STAT 标志“D”的进程,如下所示: watch -n 1 "(ps aux | awk '\$8 ~ /D/ { print \$0 }')" Zanchey 2009-09-03T05:36:51+08:002009-09-03T05:36:51+08:00 ps axu并寻找处于“D”状态的进程。根据ps(1) 联机帮助页,处于 D 状态的进程处于不间断睡眠状态,这几乎总是意味着“等待 IO”。不幸的是,通常不可能杀死这些进程。 Kyle Brandt 2009-09-03T05:42:57+08:002009-09-03T05:42:57+08:00 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 Aleksandr Levchuk 2017-12-30T13:20:29+08:002017-12-30T13:20:29+08:00 启用block_dump记录哪些进程正在执行块读/写操作: echo 1 > /proc/sys/vm/block_dump tail -f /var/log/syslog 完成后,禁用跟踪,这样您就不会向日志文件发送垃圾邮件: echo 0 > /proc/sys/vm/block_dump
您可以使用 iotop 之类的 I/O 监视器,但它只会显示具有当前 I/O 操作的进程或线程。
如果您需要浏览等待 I/O 的进程,请使用 watch 监视带有 STAT 标志“D”的进程,如下所示:
ps axu
并寻找处于“D”状态的进程。根据ps(1) 联机帮助页,处于 D 状态的进程处于不间断睡眠状态,这几乎总是意味着“等待 IO”。不幸的是,通常不可能杀死这些进程。Zanchey 的回答是我所知道的最好的找出等待 IO 的答案。
当您说您的服务器处于高负载状态时,您的意思是什么?特别是反应慢?
如果您想知道您的磁盘 IO 是否是瓶颈,我会使用 iostat 命令(sysstat 包的一部分)来查看磁盘实际上是否处于重负载状态。
例子:
启用block_dump记录哪些进程正在执行块读/写操作:
完成后,禁用跟踪,这样您就不会向日志文件发送垃圾邮件: