我有一个负载非常高的服务器。 没有任何东西在CPU使用方面跳出来,并不是交换。
我认为这是因为有些进程正在等待磁盘IO,我想看看还在等什么。
有什么程序会告诉我哪些进程正在等待IO? 我知道iotop
但是显示了当前正在做的IO。
或者这是一个愚蠢的问题? (如果这样解释如何:))
您可以使用像IOTOP这样的I / O监视器,但它只会显示具有当前I / O操作的进程或线程。
如果您需要浏览等待I / O的进程,请使用watch来监视STAT标志为'D'的进程,如下所示:
watch -n 1 "(ps aux | awk '\$8 ~ /D/ { print \$0 }')"
ps axu
并查找处于“D”状态的进程。 基于ps(1)联机帮助页 ,处于D状态的进程处于不间断的hibernate状态,这几乎总是意味着“等待IO”。 不幸的是,杀死这些过程通常是不可能的。
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/sr/sw/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/sr/sw/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