相比于cpu 使用率和内存、磁盘使用率等指标,IO瓶颈往往是我们可能会忽略的地方
查看方式两个工具
top 查看iowait 占用的cpu时间百分比
通常情况这个值很低,都是百分之零点几。但是这个值有欺骗性,因为它记录的是整体的cpu 时间中iowait百分比,有时候这个值不高但是io 确实有了性能瓶颈。
要特别注意:iowait≠IO负载,要看真实的IO负载情况,一般使用iostat –x 命令:
两个重要指标需要解释下
可以看到,svctm指的是“平均每次设备I/O操作的服务时间 (毫秒)”,而util指的是“一秒中I/O 操作的利用率,或者说一秒中有多少时间 I/O 队列是非空的。”
我们这里发现util已经接近100%,结合man的说明“Device saturation occurs when this value is close to 100%”可以知道其实目前这台服务器的IO已经到达瓶颈了。
那为什么最前面的cpu统计图的iowait项只有5.5%左右呢?因为这个iowait(也就是top里的wa%)指的是从整体来看,CPU等待IO的耗时占比:
wa -- iowait
Amount of time the CPU has been waiting for I/O to complete.
也就是说,CPU可能拿出一部分时间来等待IO完成(iowait),但从磁盘的角度看,磁盘的利用率已经满了(util%),这种情况下,CPU使用率可能不高,但是系统整体QPS已经上不去了,如果加大流量,会导致单次IO耗时的继续增加(因为IO请求都堵在队列里了),从而影响系统整体的处理性能。
确认了IO负载过高后,可以使用iotop工具具体查看IO负载主要是落在哪个进程上了。
通过iotop 查看io 耗时长的进程,TID也就是进程id
再通过lsof -a pid 查看进程打开了哪些文件,最后针对服务代码和文件系统等进行优化。
原文:https://www.cnblogs.com/fanggege/p/14016634.html