LINUX CPU iowait一般性问题分析
LINUX上遇到iowait问题的一般性排查手段
一、iowait的概念
iowait:LINUX官网的解释
Shows the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
%iowait 表示在一个采样周期内有百分之几的时间属于以下情况:CPU空闲、并且有仍未完成的I/O请求。%iowait = (cpu idle time)/(all cpu time)
对 %iowait 常见的误解有两个:
1、误以为 %iowait 表示CPU不能工作的时间
%iowait 的首要条件就是CPU空闲,既然空闲当然就可以接受运行任务,只是因为没有进程可以运行,CPU才进入空闲状态的。那为什么没有进程可以运行呢?因为进程都处于休眠状态、在等待某个特定事件:比如等待定时器、或者来自网络的数据、或者键盘输入、或者等待I/O操作完成等等。
2、误以为 %iowait 表示I/O有瓶颈问题
为什么人们会认为 %iowait 偏高是有I/O问题的迹象呢?他们的理由是:”%iowait 的第一个条件是CPU空闲,意即所有的进程都在休眠,第二个条件是仍有未完成的I/O请求,意味着进程休眠的原因是等待I/O,而 %iowait 升高则表明因等待I/O而休眠的进程数量更多了、或者进程因等待I/O而休眠的时间更长了。“ 听上去似乎很有道理,但是不对:首先 %iowait 确实表示CPU空闲、所有进程都在休眠,也确实有的进程在等待I/O,然而 %iowait 升高并不能证明等待I/O的进程数量增多了,也不能证明等待I/O的总时间增加了。
二、查看iowait以及iowait过高分析依据
1、查看iowait的命令
top 查看整体的iowait
mpstat –P ALL 查看每个cpu上iowait情况
2、iowait过高分析依据
通过top观察到iowait使用率很高,且系统命令操作卡顿,应用程序反馈缓慢,可能推测是iowait的原因。
继续通过iostat命令,查看磁盘的使用情况
iostat –d –x 1
其中的svctm一项,反应了磁盘的负载情况,如果该项大于15ms,并且util%接近100%,那就说明,磁盘现在是整个系统性能的瓶颈了。
三、iowait常见问题以及排查工具方法
iowait的表象,观察到iowait%使用率过高,一般排查工具如下:
1、确认是否是I/O问题
常用工具:top、mpstat、vmstat、iostat
2、磁盘I/O观察
iostat
sar
dstat
3、进程I/O观察
pidstat
注:
进程 ID(PID) 。
每秒读取的数据大小(kB_rd/s) ,单位是 KB。
每秒发出的写请求数据大小(kB_wr/s) ,单位是 KB。
每秒取消的写请求数据大小(kB_ccwr/s) ,单位是 KB。
块 I/O 延迟(iodelay),包括等待同步块 I/O 和换入块 I/O 结束的时间,单位是周期。
iotop工具
4、其他I/O调用跟踪命令
块设备I/O事件跟踪:blktrace
进程I/O系统调用跟踪:trace
进程块设备I/O大小跟踪:biotop
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)