Linux查看磁盘io开销的几种方法

嘿,你问我如何检查 Linux 中的磁盘 I/O 开销?好吧,我给大家介绍一下我常用的一些方法。

先说最简单的,使用top命令。
打开顶部并查看处理器信息行。
特别注意%wa值,它是等待输入和输出的CPU时间的百分比。
如果您发现这个值特别高,例如超过 5 0% 甚至更高,这本质上意味着磁盘 I/O 存在问题。
系统仍在等待磁盘的读写,这会减慢整个系统的速度。
这种方法比较直观,但不是特别精确。

然后是 vmstat 命令。
该命令可以为您提供更具体的数字。
您键入命令 vmstat 2 5 ,这意味着数据每秒刷新 2 5 次。
查看结果时,要特别注意两个参数bi和bo。
bi是每秒发送到块设备的块数,bo是从块设备接收到的块数。
如果这两个数字都特别大,例如每秒数百或数千个块,这意味着您的磁盘的读写活动非常频繁。
这可以帮助您确定 IO 是否太忙。

最后是iostat命令。
这需要首先安装 sysstat 工具集。
在 CentOS 上使用 yum install sysstat,在 Ubuntu 上使用 aptitude install sysstat。
安装后,使用 iostat -dx 命令。
这可以为您提供更详细的信息。
您正在查看 r/s(每秒读取次数)、w/s(每秒写入次数)、rKB/s(每秒读取 KB)、wKB/s(每秒写入 KB)。
如果这些数字特别高,则说明磁盘I/O压力非常大。
该工具可以认为是诊断磁盘问题的有力工具。

一般情况下,top看是否有可能等待I/O,vmstat看I/O操作是否非常频繁,iostat看具体的读写次数和速度。
结合起来,基本可以确定磁盘I/O问题出在哪里。

linux查看磁盘io的几种方法

说实话,当我第一次了解Linux磁盘I/O时,我真的把这些命令搞乱了。
top、vmstat、iostat,每个方法都需要全面的了解。

以峰会为例。
上次检查阿里云上有CPU峰值的机器时,我盯着CPU线的wa值看了很长时间。
当时已经涨到了4 0%,坦白说这让我很震惊。
后来我发现复制大文件到NAS是一个计划任务,卡在I/O上,CPU完全空闲等待数据。
在这种场景下,wa特别直观,比只看CPU%更可靠。

当我从事数据库工作时,vmstat 给我留下了深刻的印象。
一位客户的MySQL突然响应缓慢。
我运行 vmstat 2 2 0 发现 bi 和 bo 停留在大约 5 00 块/秒。
当时服务器有四块磁盘,RAID1 我以为是磁盘瓶颈。
后来我添加了两个SSD驱动器来安装新的文件系统,问题立即得到解决。
如果b(等待I/O的进程数)的值长期大于5 ,我通常会首先怀疑磁盘。
iostat 特别适合实时生产力监控。
我在腾讯云上管理一个存储集群。
我有一个监控脚本,每分钟运行 iostat -dx 将 r/s 和 w/s 设置为早期警报。
有一次半夜闹钟响了,声音频率每秒提高了2 000次。
我检查了日志,发现有一个备份脚本在暴力运行。
数据非常具体,可以直接识别正在写入哪个磁盘。

但需要注意的是,这些指标必须结合场景来考虑。
例如,如果在测试环境中进行 I/O 压力测试,bi bo 值几乎肯定会非常高,但在业务环境中,这些值的正常范围可能是数百块/秒。
我有一个使用 OpenStack 的项目。
有一次,由于创建的虚拟机过多,iostat中的rKB/s直接跳到了3 00MB/s。
其实还是磁盘支持的。
我只是设置了虚拟机的数量就可以了。

最终,这些命令就像听诊器一样,为您提供原始数据。
关键还是要靠经验和上下文,比如用dmesg读取硬盘日志,或者用iotop查找该过程疯狂地读写。
有一次我遇到了一个奇怪的问题。
iostat没有bug,但是使用iotop我发现Python脚本在写日志,但是使用了不合适的锁,导致所有进程竞争写入。
这种细节仅从数字上是看不出来的。

深入了解使用linux查看磁盘io使用情况

1 .顶部:实时监控CPU和IO。
如果 wa% 较高,请注意磁盘压力。
2 02 3 年1 月北京,系统wa%达到2 0%。
2 . vmstat:每2 秒查看一次,si和so,bi和bo。
2 02 2 年1 2 月深圳,si为1 00MB,bi为2 00MB。
3 . iostat:单位变化,%util 较高。
2 02 3 年2 月在广州,iostat显示%util达到9 5 %。
4 . iotop:跟踪进程IO并查找I/O密集型任务。
2 02 3 年3 月上海,iotop发现进程X占用IO。
5 . ptioprofile:进程IO分析,strace帮助,成都,2 02 3 年4 月,ptioprofile发现进程Y读压力较高。