性能测试-分析磁盘瓶颈
- iostat查看磁盘IO使用情况
分析磁盘IO的性能,看读写性能,延迟和吞吐量等
iostat
参数:
-c:仅显示cpu统计信息,与-d互斥
-d:仅显示磁盘统计信息,与-c互斥
-k:以KB单位显示,默认选项
-m:以MB单位显示
iostat -k 2 5
avg-cpu:总体cpu的使用情况,如果是多核cpu,显示就是所有cpu的平均值
- %user:用户空间占用cpu百分比
- %nice:用户进程空间内改变过优先级的进程占用cpu百分比
- %system:内核空间占用cpu百分比
- %iowait:io等待占用百分比
- %steal:虚拟机占用百分比
- %idle:空闲百分比
Device:各磁盘设备的IO统计信息
- tps:每秒IO次数
- KB_read/s:每秒从设备读取的数据量
- KB_wrtn/s:每秒向设备写入的数据量
- KB_read:读取的总数据量
- KB_wrtn:写入的总数据量
iostat -x
- rrqm/s:每秒进行merge的读操作数目
- wrqm/s:每秒进行merge的写操作数目
- r/s:每秒完成的读IO设备次数
- w/s:每秒完成的写IO设备次数
- rsec/s:每秒读扇区数 每个扇区大小为512字节
- wsec/s:每秒写扇区数
- rKB/s:每秒读KB数,是rsec/s的一半
- wKB/s:每秒写KB数,是wsec/s的一半
- avgrq-sz:平均每次设备IO操作的数据大小(扇区)
- avgqu-sz:平均IO队列长度
- await:平均每次设备IO操作的等待时间(毫秒)
- r_await:平均每次设备IO读操作的等待时间(毫秒)
- w_await:平均每次设备IO写操作的等待时间(毫秒)
- svctm:平均每次设备IO操作的服务时间,svctm越接近await则说明等待时间少
- %util:一秒钟有百分之多少的时间用于IO操作
分析:
重点指标:%iowait,%idle,r/s,w/s,avgqu-sz,await,svctm,%util
- 如果%util很大,超过80%,表示设备很繁忙
- await的大小一般取决于服务时间(svctm)和I/O队列的长度以及I/O请求的发出模式,如果await和svctm比较接近,则说明几乎没有等待时间
await一般大于 svctm(因为同时等待的请求的等待时间会被重复计算)svctm的大小一般和磁盘性能有关系,CPU/内存的负荷也会对其影响,请求过多也会导致svcrm增加
但是如果await远大于svctm,说明I/O队列太长(avgqu-sz是不是比较大),响应时间会变慢,如果响应时间超过了允许的范围,可以考虑更换磁盘,调整内核算法,优化应用,或者升级CPU
- r/s和w/s大,说明IO读写次数频繁
- %iowait表示cpu没在工作而在等待io的时间占比
一般%iowait过高,表示磁盘存在I/O瓶颈
不一定%iowait大就是磁盘存在瓶颈,如果cpu高速运转的情况下也可能出现%iowait高
iowait% <20% 良好
iowait% <35% 一般
iowait% >50% ??看下cpu高不高
- 如果%idle高,表示cpu空闲,但是响应时间却又比较慢,则可能是cpu等待分配内存,此时应加大内存。如果%idle持续低于10%,则表示cpu处理能力低,需要解决的资源是cpu
- 确认磁盘IO的来源,哪些进程在使用磁盘IO
iotop
参数:
-o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件
-n NUM:显示NUM次,用于非交互模式
-d SEC:间隔SEC秒显示一次
-p PID:要监控的进程pid
-u USER:监控的进程用户
iotop -o
第一部分
- Total DISK READ 和Total DISK WRITE :进程和内核线程/内核块设备子系统之间的总的读写带宽
- Actual DISK READ和Actual DISK WRITE:内核块设备子系统和下面硬件(HDD、SSD)对应的的实际磁盘IO带宽
第二部分
- TID:线程号或进程号
- PRIO:线程运行时的I/O优先级 be/3:be(best effort)表示普通级别 优先级为3
- USER:进程所属用户
- DISK READ:刷新时间间隔内读取数据量
- DISK WRITE:刷新时间间隔内写入数据量
- SWAPIN:每个进程的交换使用率
- IO:每个进程的I/O使用率,包括磁盘和交换
- COMMAND:进程名
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?