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

相关推荐

  • VMware-ESXI-6.7修改静态IP地址和主机名称以及许可证

    启用Shell 首先登陆网页控制台,在主界面点击“主机”–>“服务”–>“启用安全shell” 连接esxi主机 用shell工具连接esxi主机,在命令行输入“dcui”,就会出现显示器的控制台,由于没有显示器,所以就用这种方式改比较方便,如果有显示器,直接在显示器输出的界面上改就行,我这里由于是命令行,所以是黑白界面,显示器上会显示黄黑界面 设置ESXI…

    2024年5月8日
    1.1K00
  • 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.2K00
  • VMware虚拟机安装Ubuntu24.04教程

    (一)Ubuntu镜像文件下载(选择Ubuntu桌面版)1、Ubuntu官方网站(1)Ubuntu官网:https://ubuntu.com(2)Ubuntu官网中文站:https://cn.ubuntu.com(3)Ubuntu24.04桌面端官方下载:https://ubuntu.com/blog/ubuntu-desktop-24-04-noble-n…

    2024年5月31日
    2.5K00
  • Linux 从 lsof 开始,深入理解 Linux 虚拟文件系统!

    背景 有时会出现这样的情况,磁盘空间显示已经被占满,但是在查看磁盘的具体文件占用情况时,发现磁盘仍然有很大的空余空间。 1. 执行df命令查看磁盘使用情况,发现磁盘已经满了。 2. 执行du命令查看各个目录的磁盘占用情况,把各个目录文件的大小相加,发现并没有占满磁盘,有10多G空间莫名失踪。 3. 为何会出现这样的情况呢? 因为虽然文件已被删除,但是一些进程…

    2024年2月20日
    1.4K00
  • Docker Dockerfile 使用方法

    Dockerfile 介绍当使用Docker构建容器化应用程序时,Dockerfile是一个用于定义容器镜像的文本文件。它包含了一系列指令,告诉Docker如何从基础镜像(通常是官方或自定义的操作系统镜像)构建出最终的镜像,以及如何配置容器中的环境、文件和应用程序。 Dockerfile 的编写是构建容器的基础,它允许您定义容器的构建步骤、环境和配置。通过合…

    2023年10月19日
    1.2K00

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信