如何在 Linux 上监控硬盘负载?

如何在 Linux 上监控硬盘负载?

有没有好的命令行实用程序来监控 Linux 上的硬盘负载?类似于top监控磁盘活动 iso cpu 使用情况。

更具体地说,我怀疑对于某些(重负载)服务器,在对其上运行的程序的各个部分进行多次优化之后,现在的瓶颈只是将日志记录到磁盘上的文件。但我发现很难评估服务器可以处理多少流量。

我最理想的工具是可以打印“您现在正在使用 35% 的磁盘带宽”。有什么想法吗?

答案1

您可以使用该工具对此进行很好的测量iostat

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

最后一列列出了磁盘利用率。其定义为

向设备发出 I/O 请求的 CPU 时间百分比(设备的带宽利用率)。当此值接近 100% 时,表示设备饱和。

答案2

iotop是 top 的一个版本,用于查看每个进程使用的 IO 量。它位于标准的 ubuntu 存储库中;我不知道它是否位于 RHEL 或 Fedora 中,但应该在。

在此处输入图片描述

对于不支持 iotop 的旧内核(例如 CentOS 5.x 或 RHEL 5.x),请改用 topio(此处记录:http://yong321.freeshell.org/freeware/pio.html#linux。它依赖 /proc//io 进行 io 统计,并提供与 iotop 类似的功能。有关更多详细信息,请参阅链接。

答案3

正如 sastanin 在评论中所建议的,您可以直接处理/sys/block/sda/stat或中给出的值/proc/diskstats。当其他提到的工具都不可用并且您无法轻松安装它们时,这可能会有所帮助。

例如(IIUC)类似这样的操作(在 bash 中)应该给出每秒的读取次数:

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

https://www.kernel.org/doc/Documentation/iostats.txthttps://www.kernel.org/doc/Documentation/block/stat.txt用于文档。

答案4

我建议你看一下 nmon 工具。它将显示许多系统参数的实时负载,并将数据记录到文件中以供日后查看。这是一款免费工具这里

相关内容