linux中查看IO的方法主要有下面几种方法:
1. top %wa 的含义是等待输入输出的CPU时间百分比,这个数字越高说明越多的CPU资源在等待I/O权限
2. top可以查看一个整体的io情况,但是没法定位那个磁盘出现io问题了,我们可以结合iostat查看
语法:iostat [ options ] [ <interval> [ <count> ] ] interval 采样间隔 count采样次数 I/O statistics(输入/输出统计)的缩写
options 说明:
-c CPU的使用情况,单独显示avg-cpu部分
-d 磁盘的使用情况,单独显示Device部分
-x 更详细的io统计信息 在分析io瓶颈时,一般都会开启-x选项
-k 以kB为单位显示
-m 以mB为单位显示
注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。
iostat用于输出CPU和磁盘I/O相关的统计信息,单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息
选项 |
说明 |
%user |
CPU在用户态执行进程的时间百分比。 |
%nice |
CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比 |
%system |
CPU处在内核态执行进程的时间百分比 |
%iowait |
CPU用于等待I/O操作占用CPU总时间的百分比 |
%steal |
管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比 |
%idle |
CPU空闲时间百分比 |
1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
2. 若 %idle 的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量
3. 若 %idle 的值持续低于1,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是 CPU
选项 |
说明 |
rrqm/s |
每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并 |
wrqm/s |
每秒对该设备的写请求被合并次数 |
r/s |
每秒完成的读次数 |
w/s |
每秒完成的写次数 |
rkB/s |
每秒读数据量(kB为单位) |
wkB/s |
每秒写数据量(kB为单位) |
avgrq-sz |
平均每次IO操作的数据量(扇区数为单位) |
avgqu-sz |
平均等待处理的IO请求队列长度 |
await |
平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位) 一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了 |
svctm |
平均每次IO请求的处理时间(毫秒为单位) 如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好 如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。 |
%util |
采用周期内用于IO操作的时间比率,即IO队列非空的时间比率 例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80% 所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了 |
平时我们主要关注这三个参数:await svctm $util
3.我们更关注的是那个进程io出现了问题,这时候使用iotop查找
iotop
4.查找哪个文件引起的I/Owait
lsof -p 29093
可以查看哪些文件正在读写。
更多lsof用法参考:https://phpmianshi.com/?id=103
5.查看历史io情况 比如查看11号的
更多sar用法参考:https://phpmianshi.com/?id=107