Pie*_*ter 115 linux hard-drive load-testing
是否有一个很好的命令行实用程序来监视 linux 上的硬盘负载?类似于top
但随后监视磁盘活动 iso cpu 使用情况。
更具体地说,我怀疑对于某些(重负载)服务器,在对其上运行的程序的各个部分进行了多次优化之后,现在的瓶颈只是记录到磁盘上的文件。但是我发现很难评估服务器可以处理多少流量。
我的理想工具是打印“您现在使用了 35% 的磁盘带宽”的工具。有任何想法吗?
Dav*_*ney 93
您可以使用该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
Run Code Online (Sandbox Code Playgroud)
磁盘利用率列在最后一列。这被定义为
向设备发出 I/O 请求的 CPU 时间百分比(设备的带宽利用率)。当该值接近 100% 时,会发生器件饱和。
Tim*_*and 86
iotop是 top 的一个版本,它查看每个进程使用了多少 IO。它位于标准的 ubuntu 存储库中;我不知道它是在 RHEL 还是 Fedora 中,但应该是。
对于老版本的内核(CentOS的说5.x或RHEL 5.x的)不支持iotop,利用Topio公司代替(这里记载:http://yong321.freeshell.org/freeware/pio.html#linux,它依靠/ proc//io 用于 io 统计并提供与 iotop 类似的功能。有关更多详细信息,请参阅链接。
Ski*_*rou 16
正如 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
Run Code Online (Sandbox Code Playgroud)
有关文档,请参阅https://www.kernel.org/doc/Documentation/iostats.txt和https://www.kernel.org/doc/Documentation/block/stat.txt。
显示硬盘负载的标准工具是iostat
.
它不会告诉您正在使用多少%age磁盘带宽,因为它不知道您的磁盘有多少带宽。无论如何,您的磁盘仅具有制造商引用的用于大量连续数据传输的数据。
小智 5
找出您的总带宽是多少,您可能会使用它
hdparm -T /dev/sda
来测试缓冲区缓存 (fileio) 性能
hdparm -t /dev/sda
以测试设备读取性能
示例:我的笔记本电脑从 SATA 磁盘获取 82MB/秒,从缓存获取 2GB/秒。我的桌面从缓存获得 12GB/秒,从硬件 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
Run Code Online (Sandbox Code Playgroud)
以不同的块大小和不同的预读读取 1GB 的次数