Linux IO分析
一、iostat命令
1.1 安装iostat命令,用于监控系统io的负载情况,安装sysstat工具包
yum install sysstat -y
1.2 默认命令输出,如果iostat不带任何参数或选项,iostat会打印一个自启动以来的带选项-c和-d的汇总报告
先查看avg-cpu看瓶颈是否出现在IO层面
# iostat Linux 3.10.0-1160.53.1.el7.x86_64 (gitlab) 04/05/2022 _x86_64_ (8 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 1.32 0.00 0.70 1.39 0.14 96.45 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 39.95 0.53 224.74 2115465 897466244 vdb 0.00 0.00 0.01 4848 42924 dm-0 0.00 0.00 0.00 0 0 #%user 用户模式下所花费的时间 <60% #%nice 用户进程改变过优先级的进程占用CPU时间 #%system 内核进程所花费的CPU时间 sys+user <80% #%iowait IO等待所占用的CPU时间(重要) <30% #%steal 丢失时间占用CPU #%idle CPU处在中断(空闲)状态的时间 一般来说%idle持续游走在20%以下,瓶颈出现在CPU的性能层面。 %iowait高而%idle在70%以上,瓶颈出现在I/O设备层面。 Device: 设备名dm是disk mapper的缩写,可以在/dev/mapper下查对应谁,参数-N 可以将dm输换成相应的LVM名 tps 设备每秒接受的IO传输请求tps=transfers per second 【每秒处理事务数IOPS】 kB_read/s 设备每秒读取的数据量(KB)参数-m 可以转换成MB kB_wrtn/s 设备每秒写入的数据量(KB) kB_read 设备读取的总数据量 kB_wrtn 设备写入的总数据量 单纯iostat输出的值并不代表当前I/O状态,而是系统 当前状态请用iostat 1 2 输出的第2组值来获得
1.3 相关参数
-c 显示CPU报告
-d 显示磁盘报告
-k 使用KB代替(512B)块数目
-m 使用MB代替(512B)块数目
-p 包括单个分区的统计信息
-t 时间戳输出
-x 扩展信息统计
-z 不显示空活动汇总
-N 显示磁盘阵列(LVM) 信息
1.4 常用命令参数
iostat -d -x -p -N
rrqm/s 每秒合并放入驱动请求队列的读请求数 wrqm/s 每秒合并放入驱动请求队列的写请求数 r/s 每秒发给磁盘设备的读请求数 # 每秒完成读写I/O设备次数(顾客总数) w/s 每秒发给磁盘设备的写请求数 # 每秒完成读写I/O设备次数(顾客总数) rkB/s 每秒从磁盘设备读取的KB数 wkB/s 每秒从磁盘设备写入的KB数 avgrq-sz 平均请求大小,单位为扇区(512B) # 平均I/O数据大小,平均每人所买的东西多少 avgqu-sz 在驱动请求队列和在设备中活跃的平均请求数 # 单位时间里平均排队等待人的个数 await 平均I/O响应时间,包括在驱动请求队列里等待和设备的I/O响应时间(ms) # 每人买完包子平均等待时间 r_await 和await一样,不过只针对读(ms) w_await 和await一样,不过只针对写(ms) svctm (推断)磁盘设备的I/O平均响应时间(ms) %util 设备忙处理I/O请求的百分比(使用率) # 单位时间内包子铺有人买包子的时间比例
输出性能里最重要的指标是await。如果应用程序和文件系统使用了降低写延时(例如,写空)的方法,w_await可能不那么重要,而你可以主要关注 r_wait
二、iotop
安装命令
yum install iotop -y
常用参数
-o:只显示有io操作的进程 -b:批量显示,无交互,主要用作记录到文件。 -n NUM:显示NUM次,主要用于非交互式模式。 -d SEC:间隔SEC秒显示一次。 -p PID:监控的进程pid。 -u USER:监控的进程用户