性能测试-分析磁盘瓶颈

发布时间 2023-05-27 12:50:27作者: ttwx
  1. 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
  1. 如果%util很大,超过80%,表示设备很繁忙
  2. await的大小一般取决于服务时间(svctm)和I/O队列的长度以及I/O请求的发出模式,如果await和svctm比较接近,则说明几乎没有等待时间
await一般大于 svctm(因为同时等待的请求的等待时间会被重复计算)svctm的大小一般和磁盘性能有关系,CPU/内存的负荷也会对其影响,请求过多也会导致svcrm增加
但是如果await远大于svctm,说明I/O队列太长(avgqu-sz是不是比较大),响应时间会变慢,如果响应时间超过了允许的范围,可以考虑更换磁盘,调整内核算法,优化应用,或者升级CPU
  1. r/s和w/s大,说明IO读写次数频繁
  2. %iowait表示cpu没在工作而在等待io的时间占比 
一般%iowait过高,表示磁盘存在I/O瓶颈
不一定%iowait大就是磁盘存在瓶颈,如果cpu高速运转的情况下也可能出现%iowait高
iowait% <20%      良好
iowait% <35%      一般
iowait% >50% ??看下cpu高不高
  1. 如果%idle高,表示cpu空闲,但是响应时间却又比较慢,则可能是cpu等待分配内存,此时应加大内存。如果%idle持续低于10%,则表示cpu处理能力低,需要解决的资源是cpu

 

  1. 确认磁盘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:进程名