Linux中监测磁盘IO性能

Linux 存储系统 I/O 栈由文件系统层(file system layer)、通用块层( general block layer)和设备层(device layer)构成。

其中,通用块层是 Linux 磁盘 I/O 的核心。向上,它为访问文件系统和应用程序的块设备提供了标准接口;向下,它将各种异构磁盘设备抽象为一个统一的块设备,并响应文件系统和应用程序发送的 I/O。

在衡量磁盘性能时,我们经常提到五个常见指标:利用率、饱和度、IOPS、吞吐量和响应时间。这五个指标是衡量磁盘性能的基本指标。

  • 利用率(Utilization):磁盘处理 I/O 的时间百分比。过度使用(如超过 80%)通常意味着磁盘 I/O 存在性能瓶颈。
  • 饱和度(Saturation):指磁盘处理 I/O 的繁忙程度。过度饱和意味着磁盘存在严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受新的 I/O 请求。
  • IOPS(Input/Output Per Second):指每秒 I/O 请求的数量。
  • 吞吐量(Throughput):每秒 I/O 请求的大小。
  • 响应时间(Response time):指发送 I/O 请求和接收响应之间的间隔时间。

iostart

iostat 是最常用的磁盘 I/O 性能观察工具。它提供了各种常用性能指标,例如每个磁盘的利用率、IOPS 和吞吐量。当然,这些指标实际上来自 /proc/diskstats。

iostat -d -x 1

Linux 3.10.0-1160.el7.x86_64 (m01) 04/29/2022   _x86_64_ (1 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   129.59    2.04  180.61    77.55 88322.45   967.96     0.32    1.78    0.50    1.79   0.60  11.02
dm-0              0.00     0.00    2.04  172.45    77.55 87771.43  1006.92     0.30    1.73    0.50    1.74   0.49   8.57
dm-1              0.00     0.00    0.00  137.76     0.00   551.02     8.00     0.51    3.72    0.00    3.72   0.18   2.45

在上述指标中,您需要注意的是:

  • %util 是我们前面提到的磁盘 I/O 使用情况
  • r/s 和 w/s 是 IOPS
  • rkB/s 和 wkB/s 是吞吐量
  • r_await 和 w_await 是响应时间

pidstat

不仅可以查看每个磁盘的 I/O 情况,还可以查看每个进程的 I/O 情况

~ pidstat -d 1

Linux 3.10.0-1160.el7.x86_64 (m01) 04/29/2022   _x86_64_  (1 CPU)

12:37:07 AM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
12:37:08 AM   998       655    700.99      0.00      0.00  chronyd
12:37:08 AM     0       697   1287.13      0.00      0.00  NetworkManager
12:37:08 AM     0     39905      0.00 498102.97      0.00  dd

12:37:08 AM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
12:37:09 AM   998       655    122.45      0.00      0.00  chronyd
12:37:09 AM     0     39905      0.00 512677.55      0.00  dd
12:37:09 AM     0     39909    228.57      0.00      0.00  pidstat

从 pidstat 的输出可以看出,它可以实时查看每个进程的 I/O 情况,这包括以下内容:

  • 用户 ID (UID) 和进程 ID (PID)。
  • 每秒读取的数据大小 (kB_rd/s),以 KB 为单位。
  • 每秒发出的写请求数据的大小(kB_wr/s),单位为 KB。
  • 每秒取消写入请求的数据大小 (kB_ccwr/s),以 KB 为单位。
  • 块 I/O 延迟 (iodelay),包括等待同步块(synchronized block)I/O 和换入块(swap-in block)I/O 完成的时间,以时钟周期为单位。

iotop

它是一个类似于 top 的工具,您可以按 I/O 大小对进程进行排序,并找到具有更大 I/O 的进程。

~ iotop

Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
   TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
 39295 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.01 % [kworker/0:2]
     1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 22
     2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
  • 从该输出可以看到,前两行分别代表进程的磁盘读写总大小和磁盘的实际读写总大小。由于缓存、缓冲区、I/O 合并等因素,它们可能不相等。
  • 剩下的部分从各个角度代表了进程的 I/O 情况,包括 线程 ID、I/O 优先级、每秒磁盘读取大小、每秒磁盘写入大小、换入百分比和等待 I/O 时钟百分比。

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/6275

(0)
郭靖的头像郭靖
上一篇 2022年12月1日 下午5:03
下一篇 2022年12月2日 下午5:13

相关推荐

  • Linux firewall防火墙 换成 iptables 防火墙

    一、firewalld 增加开放端口 重启防火墙 二、iptables 增加开放端口 如果要修改防火墙配置,如增加防火墙端口3306 增加规则 保存退出后 最后重启系统使设置生效即可。 三、将firewalld防火墙换成iptables 1、直接关闭防火墙 2、设置 iptables service 如果要修改防火墙配置,如增加防火墙端口3306 增加规则 …

    2023年8月9日
    1.6K00
  • 网卡限速工具之WonderShaper

    1.什么是WonderShaper WonderShaper是用来对特定网卡进行快速限速的工具,它实际是对Linux的tc命令进行封装后的shell脚本,所以使用成本比tc更低,更容易上手,以下配合测速工具speedtest一起使用 2.如何安装WonderShaper 3.WonderShaper使用帮助 4.WonderShaper使用示例 4.1查看网…

    2023年10月7日
    1.7K00
  • Ubuntu修改静态IP、网关和DNS的方法总结

    /etc/netplan (use) Ubuntu 18.04开始可以使用netplan配置网络,其也是默认安装的。配置文件位于/etc/netplan/xxx.yaml中,netplan默认是使用NetworkManager来配置网卡信息的。 使用 netplan apply 网络配置 Ubuntu /etc/network/interfaces 修改静态…

    2023年11月27日
    1.5K00
  • Linux安装青龙面板 稳定版超级详细

    一.安装docker容器 1.工具安装 复制所有代码然后直接右键粘贴进去 中间过程输入y 回车 yum install docker-io –y 这里输入y 安装成功之后是这个样子 输入以下代码回车 systemctl start docker 复制粘贴下面命令回车 docker ps 如果显示下图 即为成功 二.安装青龙面板 1.安装面板 (想改青龙面板端…

    2022年6月22日
    3.7K00
  • Key exchange was not finished, connection is closed.解决办法

    利用java连接Linux服务器中碰到错误:Key exchange was not finished, connection is closed.,导致服务器的连接失败,报错如下 原因 是ssh中的key交换算法不兼容导致 解决办法 修改配置文件 添加如下内容 重启服务

    2023年7月25日
    2.2K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信