跳至主要內容

磁盘分析诊断命令

向往大约 3 分钟运维linux

iostat

iostat主要用于输出磁盘IO 和 CPU的统计信息。安装命令:

yum install sysstat

相关参数如下:

  • -c: 显示CPU使用情况
  • -d: 显示磁盘使用情况
  • -N: 显示磁盘阵列open in new window(LVM) 信息
  • -n: 显示NFSopen in new window 使用情况
  • -k: 以 KB 为单位显示
  • -m: 以 M 为单位显示
  • -t: 报告每秒向终端读取和写入的字符数和CPU的信息
  • -V: 显示版本信息
  • -x: 显示详细信息
  • -p:[磁盘] 显示磁盘和分区的情况

常用分析命令: iostat -xd 2 每隔2秒,显示一次设备统计信息。示例如下:

image-20221107155301380

相关属性解释如下:

  • tps:每秒钟发送到的I/O请求数。
  • Blk_read/s:每秒读取的block数。
  • Blk_wrtn/s:每秒写入的block数。
  • Blk_read:读入的block总数。
  • Blk_wrtn:写入的block总数。
  • rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
  • wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
  • r/s: 每秒完成的读 I/O 设备次数。即 rio/s
  • w/s: 每秒完成的写 I/O 设备次数。即 wio/s
  • rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
  • wkB/s: 每秒写K字节数。是 wsect/s 的一半。
  • avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
  • avgqu-sz: 平均I/O队列长度。
  • rsec/s: 每秒读扇区数。即 rsect/s
  • wsec/s: 每秒写扇区数。即 wsect/s
  • **r_await:**每个读操作平均所需的时间,不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间。
  • **w_await:**每个写操作平均所需的时间,不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间。
  • await: 平均每次设备I/O操作的等待时间 (毫秒)。
  • svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
  • %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

我们分析IO问题时,如果await大于svctm,await-svctm差值越小,则说明队列时间越短, 反之差值越大,队列时间越长,说明磁盘io有性能问题。

iotop

查看占用磁盘io最大的几个进程。

安装命令:

yum install -y iotop

相关参数:

  • -o,只显示正在产生I/O的进程或线程,运行过程中,可以通过按o随时切换
  • -b,非交互式下运行,一般用来记录日志
  • -n NUM,设置监控(显示)次数,主要用于非交互式,默认无限
  • -d SEC,设置显示的间隔秒数,支持非整数
  • -p PID,只显示指定进程(PID)的信息
  • -u USER,显示指定用户的进程信息
  • -P,只显示进程,不显示所有线程
  • -a,累积的I/O,显示从iotop启动后每个进程累积的I/O总数,便于诊断问题
  • -k,显示使用KB单位
  • -t,非交互模式下,加上时间戳
  • -q,只在第一次监测时显示列名.

示例如下:

image-20221107160340329

相关属性解释如下:

  • Total DISK READ:从磁盘中读取的总速率
  • Total DISK WRITE:往磁盘里写入的总速率
  • Actual DISK READ:从磁盘中读取的实际速率
  • Actual DISK WRITE:往磁盘里写入的实际速率
  • TID:线程ID,按p可转换成进程ID
  • PRIO:优先级
  • USER:线程所有者
  • DISK READ:从磁盘中读取的速率
  • DISK WRITE:往磁盘里写入的速率
  • SWAPIN:swap交换百分比
  • IO>:IO等待所占用的百分比