有没有好的命令行实用程序来监控 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.txt和https://www.kernel.org/doc/Documentation/block/stat.txt用于文档。
答案4
我建议你看一下 nmon 工具。它将显示许多系统参数的实时负载,并将数据记录到文件中以供日后查看。这是一款免费工具这里: