iotop和iostat

一、iotop使用

1、介绍

iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息

2、安装和使用

yum -y install iotop

iotop
Total DISK READ :	0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:	0.00 B/s | Actual DISK WRITE:       0.00 B/s

   
TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND 


第一行:总计的读和写速率总计;
第二行:实际的读和写速率总计;
第三行:
  tid:线程id,按p可转换进程pid
  PRIO:优先级
  DISK READ:磁盘读取速率
  DISK WRITE:磁盘写取速率
  SWAPIN:swap交换百分比
  IO>:IO等待所占用百分比
  COMMAND:线程/进程详细信息

3、命令格式:

iotop  -[选项]
  --version:显示程序的版本号并退出
  -h, --help:显示此帮助消息并退出
  -o, --only:仅显示实际执行I / O的进程或线程,只显示在划硬盘的程序
  -b, --batch:非交互模式,批量处理 用来记录日志的
  -n NUM, --iter=NUM:设定循环几次
  -d SEC, --delay=SEC:设定显示时间间隔[秒]
  -p PID, --pid=PID:要监控的进程/线程[全部]
  -u USER, --user=USER:用户监控[全部]
  -P, --processes:只显示进程,而不是所有线程
  -a, --accumulated:显示累积的I / O而不是带宽
  -k, --kilobytes:使用千字节而不是人性化的单位
  -t, --time:在每一行上添加一个时间戳(暗示--batch)
  -q, --quiet:抑制一些标题行(暗示--batch)
 

4、在运行iotop命令后按相应键位

r:反向排序,
o:切换至选项--only,
p:切换至--processes选项,
a:切换至--accumulated选项
q:退出 
i:改变线程的优先级

5、小结

1.我们给服务器做压力测试时,有的时候很容易碰到磁盘IO读取瓶颈,持续高的IO会导致磁盘读取密集读写磁盘IO成为短板,程序运行过慢;常见的IO服务器例如:数据库服务器,文件服务器,视频服务器等

2.使用top命令查看%wa指标,该项阈值表示io waiting等待磁盘磁盘写入完成的时间,一般不能高于30%,假如该值过大且持续很久,就证明遇到了I/O瓶颈,需要对软件进行优化,或对硬件进行升级

3.iostat -d -x 1输出磁盘相关统计信息

4.iotop定位负载来源于那个进程/线程

5.可以使用pt-ioprofile工具定位IO文件信息

二、iostat使用

1、介绍

iostat 主要用于输出磁盘IO 和 CPU的统计信息

2、安装

yum install -y sysstat

3、用法和常用参数

用法:iostat [选项] [<时间间隔>] [<次数>]

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

4、详细说明

[root@localhost ~]# iostat 
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 	2021年09月24日 	_x86_64_     (
6 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.01    0.00    0.02    0.01    0.00   99.96

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.37        25.34         1.64    3918475     253488
sdb               0.00         0.03         0.00       4272          0
scd0              0.00         0.01         0.00       1050          0

cpu属性值说明:
**%user:**CPU处在用户模式下的时间百分比。
**%nice:**CPU处在带NICE值的用户模式下的时间百分比。
**%system:**CPU处在系统模式下的时间百分比。
**%iowait:**CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
**%idle:**CPU空闲时间百分比。

备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

5、详细使用

iostat 1 5
间隔1秒,总共显示5次

iostat -d 2
每隔2秒,显示一次设备统计信息.

iostat -d 2 3
每隔2秒,显示一次设备统计信息.总共输出3次.

iostat -x sda sdb 2 3
每隔2秒显示一次sda, sdb两个设备的扩展统计信息,共输出3次.

iostat -p sda 2 3
每隔2秒显示一次sda及上面所有分区的统计信息,共输出3次.

iostat -m
以M为单位显示所有信息

iostat -d sda
显示指定硬盘信息

iostat -t
报告每秒向终端读取和写入的字符数。

iostat -d -k 1 1
查看TPS和吞吐量信息

iostat -c 1 2
查看cpu状态,间隔1秒显示一次,总共显示2次

iostat -d -x -k 1 1
查看设备使用率(%util)、响应时间(await)

说明:
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操作的数据大小 (扇区)。 每个请求平均大小,单位是扇区数,一般在200~400之间算是正常和理想的状态,如果这个值比较小,比方说只在100左右,说明太多的IO请求没有被合并,或者大的IO请求被“打散”,在写操作时,过多小的请求会造成磁盘磁头的频繁移动,降低IO性能。
avgqu-sz: 平均I/O队列长度。 avgqu-sz 平均请求队列长度,这个值在正常的系统中不应超过113太多,如果在200左右,甚至上千那说明发生了IO拥塞,而系统还在向IO请求队列中放请求(有一个例外是在执行sync,fsync操作时,该值到达最大值8192是正常的)
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百分比

备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。

猜你喜欢

转载自blog.csdn.net/y1035793317/article/details/120464253
今日推荐