iowait
命令:sar -u 可以看到有一项为iowait

%iowait 表示在一个采样周期内有百分之几的时间属于以下情况:CPU空闲、并且有仍未完成的I/O请求。
即: %iowait = (cpu idle time)/(all cpu time)
注意:
%iowait 不表示CPU不能工作的时间,
%iowait 不表示I/O有瓶颈。
所以说%iowait 所含的信息量非常少的原因,它是一个非常模糊的指标,如果看到 %iowait 升高,并不一定说明磁盘io负载过大。
那么我们怎么查看磁盘的io负载情况呢?
答: iostat
iostat
命令:
iostat -x 1 10
注:-x 选项将用于显示和io相关的扩展数据; 1表示间隔;10表示时间
avg-cpu: %user %nice %system %iowait %steal %idle
6.25 0.00 3.65 0.98 0.00 89.13
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 2.32 0.15 3.94 2.49 27.02 14.43 0.43 105.56 9.39 109.11 4.26 1.74
vdb 0.00 0.47 0.00 0.82 0.37 60.53 148.49 0.07 79.62 6.32 80.01 6.49 0.53
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了。
通过iostat工具我们可以查看服务器的io负载情况,但是无法快速定位到io负载的来源,那么我们怎么定位io高负载的进程,甚至是负载来源文件呢。
参考:https://developer.aliyun.com/article/462565?spm=a2c6h.14164896.0.0.27c36a28jNwzbs
答案:iotop
iotop
用到的工具:
iotop: http://guichaz.free.fr/iotop/
安装:yum -y install iotop
命令: iotop -oP
参数:
-o, --only 只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
-b, --batch 非交互模式,一般用来记录日志
-n NUM, --iter=NUM 设置监测的次数,默认无限。在非交互模式下很有用
-d SEC, --delay=SEC 设置每次监测的间隔,默认1秒,接受非×××数据例如1.1
-p PID, --pid=PID 指定监测的进程/线程
-u USER, --user=USER 指定监测某个用户产生的I/O
-P, --processes 仅显示进程,默认iotop显示所有线程
-a, --accumulated 显示累积的I/O,而不是带宽
-k, --kilobytes 使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用。
-t, --time 加上时间戳,非交互非模式。
-q, --quiet 禁止头几行,非交互模式。有三种指定方式。
-q 只在第一次监测时显示列名
-qq 永远不显示列名。
-qqq 永远不显示I/O汇总。
pt-ioprofile:http://www.percona.com/downloads/percona-toolkit/2.2.1/