常见磁盘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
- 语法与参数
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监控
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论