it-swarm.cn

如何监视Linux上的硬盘负载?

是否有一个好的命令行实用程序来监视Linux上的硬盘负载?像top之类的东西,然后监视磁盘活动。 CPU使用率。

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

我理想的工具是打印“您正在使用35%的磁盘带宽”的东西。有任何想法吗?

105
Pieter

您可以使用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%时,发生器件饱和。

85
Dave Cheney

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类似的功能。

82
Tim Howland

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

14
Skippy le Grand Gourou

您应该看一看 atop ,它将iotop/top/iftop的功能集中在一处,并突出显示系统上的关键部分。

8
Yvan

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

6
MikeyB

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

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

将预读设置为大于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的时间

5
user2987

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

它不会告诉您正在使用多少%age磁盘带宽,因为它不知道磁盘有多少带宽。无论如何,对于大批量连续数据传输,磁盘仅具有制造商报价的数字。

4
Alnitak

我认为RRDtool应该做您想做的 这里 它使用守护程序来转储系统数据,然后允许您按自己的意愿进行处理。我经常使用它来生成图形等以测量系统负载。

3
PixelSmack

htop是检查过程信息的好工具。您可以添加或删除列,其中包括进程的读写速度。

0
inquam