题 如何监控Linux上的硬盘负载?


是否有一个良好的命令行实用程序来监控Linux上的硬盘负载?就像是 top 但随后监控磁盘活动i.s.o. CPU使用率。

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

我理想的工具可以打印出“你现在正在使用35%的磁盘带宽”。有任何想法吗?


88
2018-05-18 13:56




完美的问题,正是我所寻找的=) - rafa.ferreira
可以直接读取sysfs,比如 /sys/block/sda/stat。字段#1给出了读取的总数,字段#5是写入的总数,字段#9是正在进行的I / O操作的数量。查看更多 kernel.org/doc/Documentation/iostats.txt 这些值是无符号长的并且可以换行。 - sastanin
这是一个非常好的问题,因为我们总是在Plesk服务器上与这个问题作斗争。然而,缺少的是 how do you do it with SNMP?。登录和检查东西很好,但是真的需要历史数据。 - Eugene van der Merwe
unix.stackexchange.com/questions/55212/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


答案:


你可以用这个来得到很好的衡量标准 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%时发生。


77
2018-05-18 14:15



这个包在Debian中的包,如果有的话? apt-cache dump 对于iostat没有任何改变 - hBy2Py
@Brian:这是在sysstat包中(无论如何......) - Joe
@Joe Nifty,谢谢! - hBy2Py
在RHEL 6.5上找不到这个。这可用于RHEL吗? - Hazok
这可以工作而不必继续延迟吗?尝试运行单个实例来获取数据可能会得到相同的数字,因为它无法取样? - Wilf


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

enter image description here

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


75
2018-05-18 14:14



实际上,默认情况下它没有安装在Ubuntu中,所以可以发出:sudo apt-get install iotop来获取它 - Moshe
iotop需要一个高于2.6.20的内核,不幸的是它排除了RedHat el4和el5。 - Dave Cheney
从RedHat 5.4开始,iotop工作所需的位被反向移植。请享用! - Dave Cheney
它在Fedora :)。 - jamie


正如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 用于文档。


12
2017-07-22 10:16





你应该看看 在顶上,将iotop / top / iftop的强大功能集于一身,突出了系统中的关键部件。


5
2018-03-01 04:42





我建议你看一下nmon工具。它将向您显示许多系统参数的实时负载以及将数据记录到文件中供以后阅读。这是一个免费的工具 这里


4
2018-05-18 15:52





找出您可能使用的总带宽 hdparm -T /dev/sda 测试缓冲区缓存(fileio)的性能 hdparm -t /dev/sda 测试设备读取性能

示例:我的笔记本电脑从SATA磁盘获得82MB /秒,从缓存获得2GB /秒。 我的dekstop从缓存中获得12GB /秒,从HW RAID阵列获得500MB /秒。 我怀疑最后的数字可能是服务器级硬件的两倍。

将readahead设置为高于256,4096最适合我

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

在不同的块大小和不同的预读时读取1GB的时间


4
2018-05-18 15:58



欢迎来到SF。您可以通过在字符串或缩进段落周围放置反引号来在帖子中使用代码突出显示。 - ℝaphink
两件事 - 1) --setra 就是现在 -a,和2), hdparm -{T,t} 根据,命令只发出磁盘读取 strace,所以是非破坏性的。 (关于互联网建议的标准免责声明适用) - i336_


显示硬盘负载的标准工具是 iostat

它不会告诉您使用了多少%磁盘带宽,因为它不知道您的磁盘有多少带宽。在任何情况下,您的磁盘只有制造商的引用数字,用于大量传输连续数据。


3
2018-05-18 14:02





我认为RRDtool应该做你想要的 这里 它使用守护进程转储系统数据,然后允许您随意处理它。我经常用它来生成图表等来测量系统负载。


2
2018-05-18 14:03