目录
- 常见磁盘IO性能指标
-
- 磁盘读写常见指标
- sysstat提供了Linux性能监控的工具集
-
- [【全局命令】 iostat](#【全局命令】 iostat)
- [多核CPU监控的核心工具 `mpstat`](#多核CPU监控的核心工具
mpstat) - [进程级资源监控 `pidstat`](#进程级资源监控
pidstat)
- 磁盘IO常见指标和分析命令工具介绍
-
- [局部命令 `iotop`](#局部命令
iotop) - 总结
- [局部命令 `iotop`](#局部命令
常见磁盘IO性能指标
磁盘读写常见指标
IOPS(Input/Output Operations per Second)- 指每秒能处理的I/O个数,表示块存储处理读写(输出/输入)的能力,单位为次,有顺序IOPS和随机IOPS
- 比如100次/秒,那iops就是100次/秒,例如数据库类应用等典型场景重点提升这个指标,下面是阿里云盘性能
- 吞吐量/带宽(Throughput)
- 是指单位时间内可以成功传输的数据数量,单位为MB/s
- 如 一个硬盘的读写 IO 是 1MB,硬盘的 IOPS 是 100,那么硬盘总的吞吐率就是 100MB/s
- 带宽 = IOPS * IO大小
- 访问时延(Latency)
- 是指IO请求从发出到收到响应的间隔时间,常以毫秒ms或者微妙us为单位
- 硬盘响应时间 = 硬盘访问时间 + IO排队延迟,过高的时延会导致应用性能下降或报错
- 普通的HDD磁盘,随机IO读写延迟是10毫秒,IO带宽大约100MB/秒,随机IOPS一般在100左右
- 使用率 Utilization
- 指磁盘处理 I/O 的时间百分比,过高的使用率 ,常规字段 Utilization-缩写%util 表示
- 如超过 80%意味着磁盘 I/O 存在性能瓶颈
- I/O 等待队列长度 Queue Length
- 表示等待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,就会增大队列长度
- 饱和度
- 磁盘处理 I/O 的繁忙程度,过高的饱和度说明磁盘存在严重的性能瓶颈
- 当饱和度为 100% 时,磁盘无法接受新的 I/O 请求
- 注意:使用率和饱和度是完全不同的
- 使用率只考虑有没有IO,不考虑IO的大小;当使用率是100%时,磁盘也可能接收新的IO请求
sysstat提供了Linux性能监控的工具集
【全局命令】 iostat
- 查看系统综合的磁盘IO情况
- iostat [参数] [时间] [次数] ` iostat -p ALL -h`
- 参数说明
| 参数 | 说明 |
|---|---|
| -c | 仅显示CPU状态统计信息 |
| -d | 仅显示磁盘统计信息 |
| -k 或 -m | 以Kb 或 Mb为单位显示,常用 -h 可读性高 |
| -p | 指定显示IO的设备,ALL表示显示所有 |
| -x | 显示详细信息 |
- 显示信息,iostat不能直接得到磁盘饱和度

| 字段 | 说明 |
|---|---|
| 【重要】r/s | 每秒发送给磁盘的读请求次数 , r/s+ w/s 是磁盘 IOPS |
| 【重要】w/s | 每秒发送给磁盘的写请求次数,r/s+ w/s 是磁盘 IOPS |
| 【重要】rkB/s | 每秒从磁盘读取的数据量,rkB/s+wkB/s 是吞吐量 |
| 【重要】wkB/s | 每秒向磁盘写入的数据量,rkB/s+wkB/s 是吞吐量 |
| 【重要】r_await | 读请求处理完成等待时间,包括在队列中的等待时间和设备实际处理时间 r_await+w_await ,是RT响应时间 |
| 【重要】w_await | 写请求处理完成等待时间,包括在队列中的等待时间和设备实际处理时间 r_await+w_await ,是RT响应时间 |
| 【重要】aqu-sz | 平均请求队列长度 |
| rareq-sz | 平均读请求大小 |
| wareq-sz | 平均写请求大小 |
| 【重要】%util | 磁盘处理I/O的时间百分比,表示的是磁盘的忙碌情况;如果>80% 就是磁盘可能处于忙碌状态 一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的 |
多核CPU监控的核心工具 mpstat
| 参数 | 说明 | 示例 |
|---|---|---|
| -P {cpu | ALL} | 指定要监控的CPU核心 cpu:CPU编号(从0开始) ALL:所有CPU核心 |
mpstat -P 0 监控0号核心 mpstat -P ALL 监控所有核心 |
| 间隔时间 | 数据采集间隔(秒) | mpstat 2 每2秒刷新一次 |
| 次数 | 采集次数,不指定则持续运行 | mpstat 2 5 每2秒采集,共5次 |
| -u | 显示CPU利用率(默认参数,通常省略) | mpstat -u 1 |

| 字段 | 说明 |
|---|---|
| CPU | CPU核心编号(all表示所有核心平均值) |
| %usr | 用户态CPU时间(运行应用程序代码) |
| %nice | 低优先级(nice值>0)用户进程CPU时间 |
| %sys | 内核态CPU时间(系统调用、内核线程) |
| %iowait | CPU等待I/O完成的时间(重要!>5%需关注) |
| %irq | 硬件中断处理时间 |
| %soft | 软中断处理时间(网络包处理、调度等) |
| %steal | 虚拟化环境中被宿主机抢占的时间(>10%表示虚拟机竞争激烈) |
| %guest | 运行虚拟CPU的时间(虚拟机客户机) |
| %gnice | 低优先级虚拟CPU时间 |
| %idle | CPU空闲时间(等待任务) |
进程级资源监控 pidstat
- 语法与参数
bash
pidstat [选项] [间隔时间] [次数]
| 类别 | 参数 | 说明 | 关键指标 |
|---|---|---|---|
| CPU监控 | -u |
进程CPU使用率(默认选项) | %usr, %system, %CPU |
| 内存监控 | -r |
页错误与内存使用 | minflt/s, majflt/s, VSZ, RSS, %MEM |
| I/O监控 | -d |
磁盘I/O统计 | kB_rd/s, kB_wr/s, kB_ccwr/s |
| 上下文切换 | -w |
进程上下文切换 | cswch/s, nvcswch/s |
| 进程筛选 | -p <PID> |
监控指定进程 | 可指定多个PID,逗号分隔 |
-p ALL |
监控所有进程 | ||
| 线程监控 | -t |
显示线程详细信息 | TGID(线程组ID), TID(线程ID) |
| 命令显示 | -l |
显示完整命令行 | 便于识别进程 |
| 输出格式 | -h |
水平输出(无换行) | 便于脚本处理 |
| 间隔控制 | 间隔 |
采样间隔(秒) | 如 1 表示1秒 |
次数 |
采样次数 | 如 5 表示采样5次后退出 |
- 监控所有进程的CPU使用率,每2秒刷新

| 字段 | 说明 |
|---|---|
| %usr | 进程在用户态的CPU使用率(运行应用程序代码) |
| %system | 进程在内核态的CPU使用率(执行系统调用) |
| %guest | 进程在虚拟机中运行的CPU使用率 |
| %wait | 进程等待运行的时间百分比(Linux 2.6.26+) |
| %CPU | 进程总的CPU使用率 = %usr + %system + %guest |
| CPU | 进程最后运行的CPU核心编号 |
磁盘IO常见指标和分析命令工具介绍
局部命令 iotop
- 查看当前系统的各个进程 使用磁盘IO的情况
- 安装
yum install -y iotop iotop -o -d 3每3秒刷新下各个进程磁盘IO情况- 参数
| 参数 | 说明 |
|---|---|
| -o | 只显示正在读写磁盘的程序 |
| -d | 跟一个数值,表示iotop命令刷新的时间 |

| 字段 | 说明 |
|---|---|
| Total DISK READ | 从磁盘中读取的总速率 |
| Total DISK WRITE | 往磁盘里写入的总速率 |
| Actual DISK READ | 从磁盘中读取的实际速率 |
| Actual DISK WRITE | 往磁盘里写入的实际速率 |
| TID | 线程ID,按 p 可以转换成进程ID |
| PRIO | 优先级 |
| USER | 线程所有者 |
| DISK READ | 进程从磁盘中读取的速率 |
| DISK WRITE | 进程往磁盘里写入的速率 |
| SWAPIN | 进程swap交换百分比 |
| IO> | IO等待所占用的百分比 |
| COMMAND | 具体的进程命令 |
总结
- 【全局】iostat是系统级别的IO监控
- 【局部】iotop是进程级别IO监控