Linux 常见性能指标 -- 磁盘

本系列记录操作系统常见性能指标,写这个主要是记录也是回顾,笔记很长,拆分了几个部分,本篇记录 磁盘 的性能指标

常见概念

响应时间

简单描述:I/O 请求从发出到收到响应的间隔时间

是衡量磁盘性能的关键指标,响应时间越短,说明磁盘的处理速度越快。响应时间受到磁头寻道时间、数据传输速度和缓存大小等因素的影响。

使用率

简单描述:磁盘处理 I/O 的时间百分比

过高的使用率,比如超过 80%,通常意味着磁盘 I/O 存在性能瓶颈,使用率是从时间角度衡量I/O,但是磁盘还可以支持并行写,所以即使使用率100%,有可能还可以接收新的I/O(不饱和)

IOPS

简单描述:(Input/Output Per Second),是指每秒的 I/O 请求数

IOPS 越高,说明磁盘在同等时间内能处理更多的读写请求。IOPS 受到磁盘转速、缓存大小和控制器性能等因素的影响。

吞吐量

简单描述:每秒的 I/O 请求大小,通常用字节/秒或数据块/秒来表示。

吞吐量越高,说明磁盘的处理能力越强。吞吐量受到磁盘转速、数据传输速度和缓存大小等因素的影响。

饱和度

简单描述:磁盘处理 I/O 的繁忙程度

过高的饱和度,意味着磁盘有严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受新的 I/O 请求


观察工具

iostat 磁盘IO观测

iostat - Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.

展示CPU的统计信息以及磁盘和分区的IO统计信息

iostat 可以同时看到磁盘IO和CPU的数据,主要用来缩小IO分析范围,这些软件第一版信息一般都是不是我们需要的数据,差异太大,主要看后续实时的数据。

iostat 参数:
数据展示
    -c     Display the CPU utilization report.
    -d     Display the device utilization report.
    -h     Make the Device Utilization Report easier to read by a human.
    -x     Display extended statistics. 显示全部参数

指定磁盘或分区
    -p    可以指定磁盘设备,会显示这个块设备和块设备的分区信息

结果解释:

默认 

  • tps(transactions per second):每秒事务数,表示磁盘或操作系统每秒处理的输入/输出操作数。事务可以包括读取和写入操作。
  • kB_read/s:每秒读取的字节数,以千字节(KB)为单位。它表示磁盘或操作系统每秒从磁盘读取的数据量。
  • kB_wrtn/s:每秒写入的字节数,以千字节(KB)为单位。它表示磁盘或操作系统每秒向磁盘写入的数据量。
  • kB_read:读取的字节数,以千字节(KB)为单位。它表示磁盘或操作系统从磁盘读取的总数据量。
  • kB_wrtn:写入的字节数,以千字节(KB)为单位。它表示磁盘或操作系统向磁盘写入的总数据量。

扩展 -x 

  • r/s:每秒读取操作次数,表示磁盘读取数据的平均速度
  • w/s:每秒写入操作次数,表示磁盘写入数据的平均速度
  • rkB/s:每秒读取操作的吞吐量,以字节(B)为单位
  • wkB/s:每秒写入操作的吞吐量,以字节(B)为单位
  • rrqm/s:每秒读取请求次数,表示磁盘读取数据的平均请求次数
  • wrqm/s:每秒写入请求次数,表示磁盘写入数据的平均请求次数
  • %rrqm:读取请求占所有请求的比例,用于表示磁盘读取操作的负载情况
  • %wrqm:写入请求占所有请求的比例,用于表示磁盘写入操作的负载情况
  • r_await:平均读取等待时间,表示磁盘读取数据时,从发出请求到开始读取数据的时间
  • w_await:平均写入等待时间,表示磁盘写入数据时,从发出请求到开始写入数据的时间
  • aqu-sz:平均磁盘队列长度,表示磁盘等待处理的请求数量
  • rareq-sz:平均读取请求大小,表示磁盘读取数据的平均请求大小
  • wareq-sz:平均写入请求大小,表示磁盘写入数据的平均请求大小
  • svctm:平均服务时间,表示磁盘处理读写请求的平均时间
  • %util:磁盘使用率,表示磁盘资源被使用的比例
iostat -d -x 5

还记得IOPS吗,每秒的 I/O 请求数,那应该是rrqm/s + wrqm/s 

使用率: %util,磁盘处理IO的时间百分比,100%不等于IO饱和

吞吐量: rkB/s+wkB/s 每秒磁盘的读写量KB

响应时间: r_await+w_await 读写请求处理完成等待时间,毫秒

pidstat 进程IO观测

这个是我们常见的进程性能观测软件了,默认CPU、-r 内存、-d 磁盘,还有印象不

pidstat - Report statistics for Linux tasks.    Linux 进程统计信息输出

pidstat -d 5 3      每5秒显示所有有IO的进程的状态,显示3次
    用户 ID(UID)和进程 ID(PID) 
    进程每秒从磁盘读取的数据大小(kB_rd/s) ,单位是 KB
    进程每秒发出的写请求数据大小,包括将要写入的(kB_wr/s) ,单位是 KB
    每秒取消的写入磁盘请求数据大小(kB_ccwr/s) ,单位是 KB
    块 I/O 延迟(iodelay),包括等待同步块 I/O 和换入块 I/O 结束的时间,单位是时钟周期

可以通过pidstat -d 来查找读写数据量很大的进程,然后依据pwdx 找到这个进程的工作目录,来定位到实际在运行的进程。

iotop 类似top的IO监控

通过iotop可以动态的监控进程和内核的IO情况,帮助排查是用户态还是内核态进程读写较高。

iotop - simple top-like I/O monitor    简单的类似top的IO监控

iotop                    # 动态展示,适合查看
iotop -k -b -n2          # 静态打印,适合保存
    -k 单位kb
    -b 打开非交互模式
    -n2  迭代次数2次
    TID 指线程ID 交互模式下,按p转进程PID
    -P Only show processes. Normally iotop shows all threads.
    -u:监控指定用户的 I/O 操作

简单测试一下,效果还是很明显 

# 写入磁盘
dd if=/dev/zero of=/tmp/test_block bs=100M count=50
# iotop
4011116 be/4 root        0.00 B/s   94.64 M/s dd if=/dev/zero of=/tmp/test_block bs=100M count=50

PRIO 显示了进程或线程的优先级,在 Linux 系统中,进程的抢占优先级由 0(最高优先级)到 255(最低优先级)之间。数值越小,优先级越高。

在 Linux 系统中,实时进程具有比普通进程更高的优先级,可以优先获得 CPU 时间片。抢占优先级则决定了进程在多任务环境下的调度顺序。

"be" 表示这是一个后台进程(Background process)

"rt" 表示该进程的实时优先级(real-time priority)

"be/4" 表示这个后台进程的抢占优先级是4

至此,我们大概能用上这几个IO的排查命令了,可以通过iostat 初步判断哪个块设备存在IO异常,通过 pidstat -d 来分析进程的IO,通过 iotop -k -b -n2 来记录进程的IO性能用来翻看历史状态。

不过,需要注意,iotop -k -b -n2 这个命令结果写入文件本身会产生较高的IO写入,建议先测试一下监控内容是否可以过滤,减少监控IO性能对应用运行的影响。

你可能感兴趣的:(知识系列,#,知识系列,Linux-基础知识,linux,笔记,运维)