Iostat
iostat命令用于监视系统CPU和I/O设备负载
常用方法: iostat -x 1 12 检测系统的io状态,每一秒刷新一次,一共刷新12次
-x该选项显示和io相关的扩展数据
还可以使用-k或者-m选项以按照kb或MB显示单位
不足之处:iostat输出结果大多数是一段时间内的平均值,因此只能对系统整体情况进行分析,难以反应峰值情况,不能针对某个进程进行深入分析
查询结果含义:
avg-cpu段
%user:显示用户级(应用程序)执行产生的cpu使用率百分比(理论上一个良好的系统cpu处于user模式下的时间小于60%为优(参考)如果高于70%,可以考虑对应用程序进行优化)
%nice:
Cpu处在nice值的用户模式下的时间百分比
Nice值:是linux系统中反应进程优先级的一个指数,范围是-20到19,默认是0,最高是-20,最低是+19,通过nice命令可以得到,nice的英文含义是友好的意思,意思就是级别越大,越友好,就会让给其他进程越多的cpu处理时间,可以通过nice -n 10 bash来打开一个nice值为10的bash(bash可由其他conmand替代)
%system:显示系统(内核)执行产生的cpu使用率百分比
%user+%sys<80%,Sys%>30%时,观察是否有过多的中断或上下文切换(上下文切换参考:Linux CPU性能指标浅析-社区博客-网易数帆)
%steal:是衡量虚拟机CPU的指标,是指分配给本虚拟机的时间片被同一宿主机的其他的虚拟机使用,一般%steal值较高时,说明宿主机的资源使用已到达瓶颈
%idle:Cpu空闲时间百分比(100%)为完全空闲,
%idle高但系统响应慢,说明cpu在等待分配内存,此时应增加内存容量,idle%过低持续小于10%则说明需要加强cpu
Deivce段:
监测设备的名称
rrqm/s:每秒合并的读操作次数
wrqm/s:每秒合并的写操作次数,即wmerege/s
r/s:每秒完成的读I/O设备次数
w/s:每秒完成的写I/O设备次数
rkb/s:每秒读K字节数
rkb/s | wkb/s | avgrq-sz | avgqu-sz | await | r_await | w_await | svctm | util% |
每秒读K字节数 | 每秒写K字节数 | 平均每次设备I/O操作的数据大小(扇区) | 平均I/O队列长度 | 平均每次I/O操作的等待时间(毫秒) | 每个读操作平均所需时间 | 每个写操作平均所需时间 | 平均每次I/O设备的操作服务时间 | 一秒中有多少%的时间用于IO操作 |
rrqm/s:每秒合并读操作次数(当系统需要读取数据的时候,VFS(virtual File System)将请求分发到各个FS,如果FS发现不同的读请求读取的是相同block的数据,FS会将这个数据merge(合并),即rmerge/s
r/s|w/s:即delta(rio)/s|delta(wio)/s
rkb/s|wkb/s:是rsect/s|wsect/s的一半,因为每扇区大小为512字节(需要计算)
rsect/s:每秒读扇区数,即delta(rsect)/s
avgrq-sz=delta(rsect+wsect)/delta(rio+wio),平均每次设备I/O操作的数据大小,单位是扇区,每个请求平均大小,在压测时,这个值在200-400之间算是比较理想的状态,如果这个值比较小,说明太多的I/O请求没有被合并,或者大的I/O请求被打散,在写操作时,过多小的请求会造成磁盘磁头的频繁移动,降低I/O性能
avgqu-sz:平均请求队列长度,delta(aveq)/s/1000,这个值在正常的系统中不应该超过113太多,如果到达了200左右,甚至上千,则说明发生了IO拥塞,而系统还在往I/O队列中放请求(有一个列外是在执行sync,fsync操作时,该值到达最大值8192是正常的),这个值越低越好。
r_await/w_await:不仅包括硬盘读/写操作的时间,还包括了在kernel中等待的时间
如果await远大于svctm,说明I/O队列太长,得到的响应时间变慢,avgqu-sz值过大,也说明,I/O队列过长,可能存在硬盘瓶颈(await包括等待时间和服务时间)
如果%util值接近100%,则表示设备可能已经满负荷运行了,注意:如果是多硬盘,即使%util值是100%,因为磁盘的并发能力,所以磁盘的使用未必就到达了瓶颈。
吞吐量计算方式=rkb/s+wkb/s:顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播VOD,关注连续读写性能,数据吞吐量是关键衡量指标
IOPS计算方式=r/s+w/s,即I/O per second,即每秒钟处理的I/O个数,IOPS是随机读写性能的关键衡量指标
Iostat命令有时不能准确的判断系统瓶颈的问题所在,可以结合top,sar等命令再进行判断。