娃哈哈好喝-真的!
技术够用就行,吃好喝好睡好!

linux查看磁盘io占用情况

os:centos7,需要用到的工具:iostat、iotop、pidstat

1、iostat工具

如果没有这个工具可以通过yum安装

[root@centos ~]# yum -y install sysstat
[root@centos ~]# iostat -x 1 3
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.12    0.00    0.00    0.00    0.00   99.88

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

输出内容较宽,如果屏幕宽可以看的明白一点,字段说明:

avg-cpu段

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

Device段

Device:设备名称
tps:每秒的IO读、写请求数量,多个逻辑请求可以组合成对设备的单个I/O请求。
Blk_read/s (kB_read/s, MB_read/s):从设备读取的数据量,以每秒若干块(千字节、兆字节)表示。块相当于扇区,因此块大小为512字节。
Blk_wrtn/s (kB_wrtn/s, MB_wrtn/s):写入设备的数据量,以每秒若干块(千字节、兆字节)表示。块相当于扇区,因此块大小为512字节。
Blk_read (kB_read, MB_read):读取块的总数(千字节、兆字节)。
Blk_wrtn (kB_wrtn, MB_wrtn):写入块的总数(千字节,兆字节)。
rrqm/s:每秒合并到设备的读请求数。即delta(rmerge)/s 
wrqm/s:每秒合并到设备的写入请求数。即delta(wmerge)/s 
r/s:每秒完成的读I/O设备次数。即delta(rio)/s 
w/s:每秒完成的写I/0设备次数。即delta(wio)/s 
rsec/s (rkB/s, rMB/s):每秒读取设备的扇区数(千字节、兆字节)。每扇区大小为512字节
wsec/s (wkB/s, wMB/s):每秒写入设备的扇区数(千字节、兆字节)。每扇区大小为512字节
avgrq-sz:平均每次设备I/O操作的数据量(扇区为单位)。即delta(rsec+wsec)/delta(rio+wio) 
avgqu-sz:平均每次发送给设备的I/O队列长度。
await:平均每次IO请求等待时间。(包括等待队列时间和处理时间,毫秒为单位)
r_await:平均每次IO读请求等待时间。(包括等待队列时间和处理时间,毫秒为单位)
w_await:平均每次IO写请求等待时间。(包括等待队列时间和处理时间,毫秒为单位)
svctm:平均每次设备I/O操作的处理时间(毫秒)。警告!不要再相信这个字段值,这个字段将在将来的sysstat版本中删除。 
%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。当该值接近100%时,设备饱和发生。

iostat参数详解

-c: 仅显示CPU统计信息,与-d选项互斥
-d:仅显示磁盘统计信息,与-c选项互斥
-h:使用NFS(Network File System网络文件系统)的输出报告,更加友好可读。需要使用-n参数开启NFS。
-k:以 kb 为单位显示,默认情况下,iostat的输出是以block作为计量单位,加上这个参数可以以kb作为计量单位显示。(该参数仅在linux内核版本2.4以后数据才是准确的)
-m:以 mb 为单位显示(该参数仅在linux内核版本2.4以后数据才是准确的)
-N:显示磁盘阵列(LVM) 信息。
-V:显示版本信息
-x:显示更详细的磁盘报告信息,默认只显示六列,加上该参数后会显示更详细的信息(该参数仅在linux内核版本2.4以后数据才是准确的)
-n:显示NFS(Network File System网络文件系统) 使用情况(该参数仅在linux内核版本2.6.17以后有效)
-t:输出报告时显示系统时间
-p:[ { device [,…] | ALL } ] 显示磁盘分区的相关统计信息(默认粒度只到磁盘,没有显示具体的逻辑分区)
-y:跳过不显示第一次报告的数据,因为iostat使用的是采样统计,所以iostat的第一次输出的数据是自系统启动以来的累计的数据

性能分析

  • I/O瓶颈:

如果%iowait的值过高,表示硬盘存在I/O瓶颈

  • 内存不足:

%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU在等待分配内存,此时应加大内存容量

  • CPU资源不足:

如果%idle值持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU

  • IOPS计算:

计算方式: r/s+w/s

I/O per second,即每秒钟可以处理的I/O个数。随机读写频繁的应用(一般指I/O小于64KB的应用场景),如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS是关键衡量指标。

  • 吞吐量计算:

计算方式: rkB/s+wkB/s 顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播VOD(Video On Demand),关注连续读写性能。数据吞吐量是关键衡量指标。

  • 示例

#每隔 1秒刷新显示,显示3次
iostat 1 3
#每隔 2秒刷新显示详细信息,显示3次
iostat -x 2 3
#每隔 1秒刷新,显示CPU统计信息3次
iostat -c 1 3
#每隔 1秒刷新显示详细信息,显示3次,去除第1次
iostat -x -y 1 3
2、iotop工具

查看占用IO高的进程,需要使用iotop命令,如果没有可以通过yum安装

[root@centos ~]# yum -y install iotop
[root@centos ~]# iotop -oP
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
   PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                  
 90336 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.01 % [kworker/3:1

可以看到进程号,磁盘写入量,读取量,IO百分比以及是哪个命令执行的

常用选项

-o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件。
-n NUM:显示NUM次,主要用于非交互式模式。
-d SEC:间隔SEC秒显示一次。
-p PID:监控的进程pid。
-u USER:监控的进程用户。

常用参数

-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  只在第一次监测时显示列名. 去除头部一些行:这个参数可以设置最多3次来移除头部行:-q列头部只在最初交互显示一次;-qq列头部不显示;-qqq,I/O的总结不显示

常用快捷键

r:改变排序顺序。
o:只显示有IO输出的进程。
p:进程/线程的显示方式的切换。
a:显示累积使用量。
q:退出。
1.排序字段:使用键盘左右箭头控制排序的字段(排序字段右侧有">""<",例如: IO>)\
2.排序方式:"r"键可以控制升序还是降序排列(">"表示降序,"<"表示升序);
3.仅显示有IO发生的进程:"o"控制是否仅显示发生IO的进程;
4.进程/线程:"p"键控制线程号/进程号的(PID/TID)
5.累积流量:"a"键控制是否显示累积IO量,更加利于查看问题
6.强制刷新:"q"键退出,除了这些键之外的任意键都会强制刷新。
3、pidstat工具
#每2秒更新一次
[root@centos ~]# pidstat -d 2
Linux 3.10.0-957.el7.x86_64 (centos)    08/01/2023      _x86_64_        (8 CPU)

04:31:23 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

04:31:24 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

04:31:25 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

因为我这里是测试的机器,所以几乎没有读写操作,通过此命令可以看出是哪个进程id占用的io

常用参数

-u 默认的参数,显示各个进程的CPU使用统计
-r 显示各个进程的内存使用统计
-d 显示各个进程的IO使用情况
-p 指定进程号
-w 显示每个进程的上下文切换情况
-t 显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数

输出字段

UID:用户id
PID:进程id
%user:表示用户进程所使用cpu的百分比
%system:表示内核进程所使用cpu的百分比
%guest:表示运行vCPU时所消耗的cpu时间百分比
%wait:表示任务在等待运行时花费的cpu的百分比。
%CPU:表示进程所使用cpu的百分比
CPU:处理进程的cpu编号
Command:进程对应的命令
注:运行pidstat不加任何选项,统计的信息为系统启动开始的各项统计信息
赞(0)
未经允许不得转载:娃哈哈好喝 » linux查看磁盘io占用情况
分享到: 更多 (0)