本系列记录操作系统常见性能指标,写这个主要是记录也是回顾,笔记很长,拆分了几个部分,本篇记录 磁盘 的性能指标
简单描述:I/O 请求从发出到收到响应的间隔时间
是衡量磁盘性能的关键指标,响应时间越短,说明磁盘的处理速度越快。响应时间受到磁头寻道时间、数据传输速度和缓存大小等因素的影响。
简单描述:磁盘处理 I/O 的时间百分比
过高的使用率,比如超过 80%,通常意味着磁盘 I/O 存在性能瓶颈,使用率是从时间角度衡量I/O,但是磁盘还可以支持并行写,所以即使使用率100%,有可能还可以接收新的I/O(不饱和)
简单描述:(Input/Output Per Second),是指每秒的 I/O 请求数
IOPS 越高,说明磁盘在同等时间内能处理更多的读写请求。IOPS 受到磁盘转速、缓存大小和控制器性能等因素的影响。
简单描述:每秒的 I/O 请求大小,通常用字节/秒或数据块/秒来表示。
吞吐量越高,说明磁盘的处理能力越强。吞吐量受到磁盘转速、数据传输速度和缓存大小等因素的影响。
简单描述:磁盘处理 I/O 的繁忙程度
过高的饱和度,意味着磁盘有严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受新的 I/O 请求
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 可以指定磁盘设备,会显示这个块设备和块设备的分区信息
结果解释:
默认
扩展 -x
iostat -d -x 5
还记得IOPS吗,每秒的 I/O 请求数,那应该是rrqm/s + wrqm/s
使用率: %util,磁盘处理IO的时间百分比,100%不等于IO饱和
吞吐量: rkB/s+wkB/s 每秒磁盘的读写量KB
响应时间: r_await+w_await 读写请求处理完成等待时间,毫秒
这个是我们常见的进程性能观测软件了,默认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可以动态的监控进程和内核的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性能对应用运行的影响。