Linux查看与测试磁盘IO性能

article/2025/11/5 20:17:36

1. 查看磁盘 IO 性能

1.1 top 命令

top 命令通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能,如果这个数值过大,很可能是磁盘 IO 太高了,当然也可能是其他原因,例如网络 IO 过高等。

top命令的其他参数代表的含义详见top命令详解

1.2 sar 命令

sar 命令是分析系统瓶颈的神器,可以用来查看 CPU 、内存、磁盘、网络等性能。

sar 命令查看当前磁盘性能的命令为:

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yJVZK63v-1674028923358)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

[root@server-68.2.stage.polex.io var ]$ sar -d -p 1 2
Linux 3.10.0-693.5.2.el7.x86_64 (server-68)     03/11/2019     _x86_64_    (64 CPU)02:28:54 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
02:28:55 PM       sda      1.00      0.00      3.00      3.00      0.01      9.00      9.00      0.90
02:28:55 PM       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:55 PM polex_pv-rootvol      1.00      0.00      3.00      3.00      0.01      9.00      9.00      0.90
02:28:55 PM polex_pv-varvol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:55 PM polex_pv-homevol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.0002:28:55 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
02:28:56 PM       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:56 PM       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:56 PM polex_pv-rootvol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:56 PM polex_pv-varvol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:56 PM polex_pv-homevol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:          sda      0.50      0.00      1.50      3.00      0.00      9.00      9.00      0.45
Average:          sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:    polex_pv-rootvol      0.50      0.00      1.50      3.00      0.00      9.00      9.00      0.45
Average:    polex_pv-varvol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:    polex_pv-homevol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e16WjY1d-1674028923359)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

其中, “-d”参数代表查看磁盘性能,“-p”参数代表将 dev 设备按照 sda,sdb……名称显示,“1”代表每隔1s采取一次数值,“2”代表总共采取2次数值。

  • await:平均每次设备 I/O 操作的等待时间(以毫秒为单位)。

  • svctm:平均每次设备 I/O 操作的服务时间(以毫秒为单位)。

  • %util:一秒中有百分之几的时间用于 I/O 操作。

对于磁盘 IO 性能,一般有如下评判标准:

正常情况下 svctm 应该是小于 await 值的,而 svctm 的大小和磁盘性能有关,CPU 、内存的负荷也会对 svctm 值造成影响,过多的请求也会间接的导致 svctm 值的增加。

await 值的大小一般取决与 svctm 的值和 I/O 队列长度以 及I/O 请求模式,如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。

%util 项的值也是衡量磁盘 I/O 的一个重要指标,如果 %util 接近 100% ,表示磁盘产生的 I/O 请求太多,I/O 系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。

默认情况下,sar从最近的0点0分开始显示数据;如果想继续查看一天前的报告;可以查看保存在/var/log/sa/下的sar日志:

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uM8lgx2d-1674028923359)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

[root@server-68.2.stage.polex.io var ]$ sar -d -p -f  /var/log/sa/sa11  | more
Linux 3.10.0-693.5.2.el7.x86_64 (server-68)     03/11/2019     _x86_64_    (64 CPU)09:50:01 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:00:01 AM       sda      0.51      0.00      9.06     17.82      0.02     37.65     14.65      0.74
10:00:01 AM       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:00:01 AM polex_pv-rootvol      0.22      0.00      2.50     11.56      0.01     37.44     14.10      0.31
10:00:01 AM polex_pv-varvol      0.30      0.00      6.55     21.97      0.01     38.55     14.73      0.44
10:00:01 AM polex_pv-homevol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:10:01 AM       sda      0.79      3.45     13.18     21.06      0.04     51.81     11.03      0.87
10:10:01 AM       sdb      0.04      3.45      0.00     86.33      0.00      0.25      0.25      0.00
10:10:01 AM polex_pv-rootvol      0.26      0.00      3.08     11.85      0.01     50.21     17.88      0.46
10:10:01 AM polex_pv-varvol      0.54      3.45     10.10     24.95      0.03     52.58      7.49      0.41
10:10:01 AM polex_pv-homevol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:20:01 AM       sda      0.65      0.00     10.43     16.11      0.03     38.67     10.99      0.71
10:20:01 AM       sdb      0.04      3.46      0.00     86.33      0.00      0.08      0.08      0.00

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BUtKQSuP-1674028923360)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

1.3 iostat 命令

iostat主要用于监控系统设备的 IO 负载情况,iostat 首次运行时显示自系统启动开始的各项统计信息,之后运行 iostat 将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwpBykMg-1674028923361)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

[root@server-68.2.stage.polex.io var ]$ iostat -dxk 1 2
Linux 3.10.0-693.5.2.el7.x86_64 (server-68)     03/11/2019     _x86_64_    (64 CPU)Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.06    0.32    2.08     1.44    72.78    61.81     0.14   59.32    0.51   68.37   5.68   1.36
sdb               0.00     0.00    0.03    0.00     1.15     0.00    86.32     0.00    0.17    0.17    0.00   0.16   0.00
dm-0              0.00     0.00    0.00    0.24     0.02     1.56    13.22     0.01   44.55    6.36   44.71  13.25   0.32
dm-1              0.00     0.00    0.32    1.90     1.32    71.22    65.30     0.14   62.43    0.49   72.79   4.75   1.06
dm-2              0.00     0.00    0.00    0.00     0.00     0.00    26.79     0.00   28.06    4.68   38.98   5.18   0.00Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    3.00     0.00    16.00    10.67     0.26   86.33    0.00   86.33  42.33  12.70
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    3.00     0.00    16.00    10.67     0.26   86.33    0.00   86.33  42.33  12.70
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9YPvqAAU-1674028923362)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

该命令的结果与上面 sar -d -p 1 2 命令类似,实际使用中主要还是看 await svctm %util 参数。

1.4 vmstat 命令

vmstat 命令使用方法很简单:

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-994T4pG8-1674028923363)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

[root@server-68.2.stage.polex.io var ]$ vmstat  2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st3  0      0 93221488   4176 69117136    0    0     0     1    0    0  4  1 94  0  02  0      0 93226048   4176 69117128    0    0     0     0 33326 36671 18  2 80  0  01  0      0 93218776   4176 69117104    0    0     0     9 26225 21588 18  2 80  0  01  0      0 93226072   4176 69117072    0    0     0     0 13271 25857  5  0 94  0  00  0      0 93223984   4176 69117040    0    0     0     5 34637 24444 20  2 78  0  0
11  0      0 93219248   4176 69117184    0    0     0     0 30736 20671  8  2 90  0  0

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9RdCRsl-1674028923363)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

输出结果中,bi bo 可以表示磁盘当前性能:

  • bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是 1024 byte 。

  • bo 块设备每秒发送的块数量,例如我们读取文件,bo 就要大于0。bi 和 bo 一般都要接近 0,不然就是 IO 过于频繁,需要调整。

2. 测试磁盘 IO 性能

2.1 hdparm 命令

hdparm 命令提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数,注意该命令只能测试磁盘的读取速率。

例如,测试 sda 磁盘的读取速率:

[root@server-68.2.stage.polex.io var ]$ hdparm -Tt /dev/polex_pv/varvol/dev/polex_pv/varvol:Timing cached reads:   15588 MB in  2.00 seconds = 7803.05 MB/secTiming buffered disk reads: 1128 MB in  3.01 seconds = 374.90 MB/sec

从测试结果看出,带有缓存的读取速率为:7803.05MB/s ,磁盘的实际读取速率为:374.90 MB/s 。

2.2 dd 命令

Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

我们可以利用 dd 命令的复制功能,测试某个磁盘的 IO 性能,须要注意的是 dd 命令只能大致测出磁盘的 IO 性能,不是非常准确

测试写性能命令:

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0N1PdAMU-1674028923364)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

[root@server-68.2.stage.polex.io var ]$ time dd if=/dev/zero of=test.file bs=1G count=2 oflag=direct
2+0 records in
2+0 records out
2147483648 bytes (2.1 GB) copied, 13.5487 s, 159 MB/sreal    0m13.556s
user    0m0.000s
sys    0m0.888s 

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I316AKR1-1674028923365)(https://www.cnblogs.com//common.cnblogs.com/images/copycode.gif)]](javascript:void(0); “复制代码”)

可以看到,该分区磁盘写入速率为 159M/s,其中:

  • /dev/zero 伪设备,会产生空字符流,对它不会产生 IO 。
  • if 参数用来指定 dd 命令读取的文件。
  • of 参数用来指定 dd 命令写入的文件。
  • bs 参数代表每次写入的块的大小。
  • count 参数用来指定写入的块的个数。
  • offlag=direc 参数测试 IO 时必须指定,代表直接写如磁盘,不使用 cache 。

测试读性能命令:

[root@server-68.2.stage.polex.io var ]$ dd if=test.file of=/dev/null  iflag=direct
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 4.87976 s, 440 MB/s

可以看到,该分区的读取速率为 440MB/s

2.3 fio 命令

fio 命令是专门测试 iops 的命令,比 dd 命令准确,fio 命令的参数很多,这里举几个例子供大家参考:

顺序读:

fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r

随机写:

fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw

顺序写:

fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w

混合随机读写:

fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop

参考链接:

https://elf8848.iteye.com/blog/2168876

https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/sar.html

http://blog.sina.com.cn/s/blog_62b832910102w3zt.html

https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html

https://linux.cn/article-6104-1.html

http://www.runoob.com/linux/linux-comm-hdparm.html


http://chatgpt.dhexx.cn/article/FAYhGr4V.shtml

相关文章

Linux 查看磁盘IO

查看命令iostat,# 如果没有 iostat 命令,那么使用 yum install sysstat 进行安装 #间隔1秒,查询10次 iostat -x 1 10 由上图可知,vdb磁盘的 %util【IO】几乎都在100%,原因是频繁的读取数据造成的。 其他字段说明 De…

linux查看磁盘io

iostat -dxk 1 2 iostat iostat,对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 命令参数说明…

linux查看磁盘IO,网络IO 总结

linux查看磁盘IO,网络 IO可用的命令 1. top 监控整体服务器,cpu,内存,磁盘,网络等 2. dstat -d 查看当前磁盘每秒的读取,写入量,单位K 3. dstat -r 查看当前磁盘随机的读IOPS,…

linux查看磁盘io使用情况

六种方法 top命令、vmstat命令、iostat命令、iotop命令、pt-ioprofile命令、pidstat命令 一、 top命令 top - 11:41:22 up 51 min, 2 users, load average: 0.01, 0.04, 0.01 Tasks: 130 total, 1 running, 129 sleeping, 0 stopped, 0 zombie Cpu(s): 0.2%us, 0.1%sy, 0.0%n…

从磁盘看 IO

计算机上的易失和非易失存储器 常见磁盘可以分为两类:机械磁盘和固态磁盘。 第一类,机械磁盘,也称为硬盘驱动器(Hard Disk Driver),通常缩写为 HDD。机械磁 盘主要由盘片和读写磁头组成,数据就…

硬盘io性能分析

一、磁盘性能主要经常会看磁盘i/o使用率、iops、吞吐量、i/o响应时间等,常用命令sar、iostat、dstat : 1、常用命令:iostat -xm 1 ,单位MB,表示每1秒刷新一次 ----------------- avg-cpu ---------------- %user&…

磁盘IO 基本常识

更多内容,前往 IT-BLOG 计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的 CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同…

【性能测试】系统常用监控- -磁盘IO

性能测试系统常用监控- -磁盘 文章目录 性能测试系统常用监控- -磁盘前言磁盘IO1.常用概念2.磁盘IO性能3.性能指标4.性能分析5.常用分析5. 1 iostat命令解析5.2 查看硬盘类型5.3 查看磁盘IO调度5.4 查看磁盘IO调度5.3 调优方法5.1 RAID 总结 前言 性能测试过程中,在…

磁盘IO

基本概念: 在数据库优化和存储规划过程中,总会提到IO的一些重要概念,在这里就详细记录一下,个人认为对这个概念的熟悉程度也决定了对数据库与存储优化的理解程度,以下这些概念并非权威文档,权威程度肯定就不…

磁盘IO及性能指标

一、磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出。操作系统从上层到底层,各个层次之间均存在 I/O。比如,CPU 有 I/O,内存有 I/O, VMM 有 I/O, 底层磁盘上也有 I/O,这是广义上的 I/O。通常来讲,一个上层的 I/O 可能会产生针对磁盘的多个 I/O,也就是说,上层的 …

一提到mysql,总有人说磁盘IO,到底什么是磁盘IO?

为什么mysql的innodb存储引擎选择了B树,这个和磁盘的特性有着非常大的关系。 我们先来看下磁盘上的物理结构。 如果我们简化一下,可以这么看 再看几张模型图 一个磁盘由大小相同且同轴的圆形盘片组成,磁盘可以转动,各个磁盘必须同…

一寸照像素和厘米的关系及换算

一寸照的概念: 照片的一寸和二寸是指照片的边长度,而不是对角线。 这里的寸指的是英寸 厘米和英寸: 1 厘米=0.3937 英寸 1 英寸=2.54 厘米 一寸照的厘米概念: 一寸照规格是宽*高2.5cm*3.5cm ,换…

CSS像素单位

一、px 整个屏幕的一个像素点。 二、em单位 1em:16px浏览器的默认值1em 基准值(16px)* number(1) 16px2em 基准值(16px)* number(2) 32px 当默认值改了&#xff0c…

python 找出矩阵中非零数

转载于:https://www.cnblogs.com/fuhang/p/9185840.html

可逆矩阵的概念 逆矩阵的求解方法总结

可逆矩阵的概念:设A是一个n阶矩阵,如果存在n阶矩阵B,使得ABBAE,则称矩阵A为可逆矩阵,且B称为A的逆矩阵。 逆矩阵的求解方法总结: 1.待定系数法 利用定义进行求解,设A是一个n阶矩阵,如…

直观理解:为什么A为 n 阶满秩方阵时,Ax=0 只有零解?

本篇博客仅记录一下我个人思考的一点想法,方便以后回顾。并不严谨,希望给大家提供一点直观的理解。 通过上边的变形,我们可以看出 A x Ax Ax的本意就是用 x [ x 1 x 2 . . . x n ] x[x_{1} x_{2} ... x_{n}] x[x1​x2​...xn​]作为系数对 A…

【矩阵论笔记】矩阵特征矩阵的行列式因子、不变因子、初等因子

矩阵的特征值矩阵是由矩阵特征值 λ \lambda λ构成的矩阵。包含三个运算: 1、互换两行(列) 2、某行(列)乘非零常数 3、某行(列)乘多项式后加到另一行 n阶 λ \lambda λ矩阵可逆的充要条件是&a…

matlab求矩阵的非,matlab矩阵非零个数 Matlab如何提取非零元素

matlab 如何把一个矩阵中的非零数取出组成一行 >> A=randi([0 4],4) A = 4 2 1 0 2 3 2 3 0 4 0 2 0 3 0 0 >> B=nonzeros(A) B = 4 2 2 3 4 3 1 2 3 2 matlab中怎么求数组中非零元素的个数 matlab中求矩阵中非零元素的均值怎么求啊? 代码: a(a==0)=NaN; mean(a,…

【随心所记】矩阵A的行列式不等于0,是A可逆的充要条件吗?答:是这样的

题目 解析 注意,谈到 可逆矩阵 A,那么A一定是 方阵 哈!!!即 n行n列。

Matlab与线性代数 -- 寻找矩阵的非零元素

本微信图文详细介绍了Matlab中find函数的用法。