Linux性能监控命令_iostat & 监控I/O状态

简介

    iostat命令用于监视系统输入/输出设备的加载情况,方法是观察设备的活动时间与其平均值的关系转移率。iostat命令生成报告,可用于更改系统配置,以便更好地平衡输入/输出负载物理磁盘。

        

目录

1. 语法

1.1. 常用参数

2. 详细用法

2.1. 监控CPU利用率

2.2. 监控TPS磁盘读写

2.3. 监控磁盘利用率

2.4. 指定某块磁盘

2.5. 指定输出单位

2.6. 常见组合用法

3. 应用场景

3.1. 判断cpu瓶颈

3.2. 判断io瓶颈


        

1. 语法

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

        

1.1. 常用参数

-c:显示CPU利用率
-d:显示设备利用率
-t:显示时间戳
-x:显示详细磁盘指标
-y:跳过第一条数据
-k:显示单位为KB
-m:显示单位为MB
-p:指定主设备,显示主设备下所有磁盘信息

        

2. 详细用法

  • 注意:iostat 命令第一次输出数据不准确,需要指定 -y 跳过第一条输出

2.1. 监控CPU利用率

iostat -c 1 3    # 输出3次,每次间隔1秒

%user  :用户空间占用的CPU
%nice  :改变过优先级进程占用的CPU
%system:内核空间占用的CPU
%iowait:CPU 等待 IO 的占比(若该占比较高,硬盘可能存在 I/O 瓶颈)
%steal :管理程序(hypervisor)为另一个虚拟进程提供服务而等待的虚拟CPU占比
%idle  :空闲的CPU(若空闲较大,但系统响应慢,有可能CPU等待内存分配,应适当增加内存容量;若空闲持续低于 1%,则系统的CPU处理能力较低)

        

2.2. 监控TPS磁盘读写

iostat -d 1 3    # 输出3次,每次间隔1秒

Device   :设备名
tps      :每秒 I/O 数(连续读写之和)
kB_read/s:每秒从设备读取的数据(单位:KB)
kB_wrtn/s:每秒从设备写入的数据(单位:KB)
kB_read  :读取的总数据量(单位:KB)
kB_wrtn  :写入的总数据量(单位:KB)

        

2.3. 监控磁盘利用率

iostat -dx 1 3    # 输出3次,每次间隔1秒

Device  :磁盘名
rrqm/s  :每秒进行的 merge 读数目
wrqm/s  :每秒进行的 merge 写数目
r/s     :每秒读 I/O 次数
w/s     :每秒写 I/O 次数
rkB/s   :每秒读设备的字节数(单位:K字节)
wkB/s   :每秒写设备的字节数(单位:K字节)
avgrq-sz:平均每次设备I/O操作的数据大小
avgqu-sz:平均I/O队列长度
r_await :每个读操作的平均所需时间(包含列队等待时间)
w_await :每个写操作的平均所需时间(包含列队等待时间)
await   :平均每次设备 IO 操作的等待时间(平均响应时间不超过5ms,单位:ms)
svctm   :平均每次设备 IO 操作的服务时间(单位:ms)
%util   :磁盘繁忙程度(注意:每块磁盘后面都有表示是否繁忙)

如果 svctm 与 await 比较接近,说明 IO 几乎没有等待。
如果 await 远高于 svctm ,说明 IO 队列太长 响应太慢,需要优化,可以从 avgqu-sz 队列长度看出来。

        

2.4. 指定某块磁盘

只需要在参数或者命令后面指定设备即可

iostat  /dev/sda2  1  3
iostat  1  3  /dev/sda2
iostat  -tx  /dev/sda2

        

2.5. 指定输出单位

指定单位KB(-k)

        

指定单位MB(-m)

        

2.6. 常见组合用法

同时查看CPU和磁盘读写(输出时间,不输出第一次无意义的信息)

iostat -cdty 1 3    # c指定CPU,d指定磁盘,t每次输出时间,y跳过第一次无意义的数据

        

输出CPU和磁盘利用率(输出时间,不输出第一次无意义的信息)

iostat -xty 1 3   # x指定磁盘利用率,t每次输出时间,y跳过第一次无意义的数据

        

指定一块磁盘,查看磁盘读写(输出时间,不输出第一次无意义的信息)

iostat -dty /dev/sda1 1 3    # d执行磁盘读写,t每次输出时间,y跳过第一次无意义的数据

        

3. 应用场景

3.1. 判断cpu瓶颈

iostat可以通过整体cpu使用情况来粗略的判断一下是否存在瓶颈

iostat -ct 1
  • -c:监控cpu
  • -t:输出时间

第1次的监控信息是之前的平均信息,所以对当前来说并不准确,使用 -y 跳过

  1. 上述可以看到 idle 为0,表示没有可用的cpu资源,前面 user 占用84.1%,system 占用15.9%,从比例上来看是正常的。在生产环境中,我们一般把cpu总占用率控制在 70% 以下,如果是生成环境出现了 idle 低于 30%,那么需要排除进程,通过其他命令 toppidstat 查看。
  2. 如果 idle 接近0,iowait 使用过多,那么就是磁盘出现了瓶颈,使用 iostat -dx 来查看总的磁盘利用率,读写速度等情况,再使用 pistat 检查出现磁盘瓶颈的进程。
  3. 如果 system 接近 user,那么系统态调用过多,这可能是程序代码不规范导致的,需要检查代码。

top 命令见其他文章:https://blog.csdn.net/m0_61066945/article/details/126452494

pidstat 命令见其他文章:https://blog.csdn.net/m0_61066945/article/details/126568206

        

3.2. 判断io瓶颈

iostat 命令的主要作用就是用来判断磁盘瓶颈,来看一个例子

iostat -xy 1

来看几个关键信息:

  • user 达到 67.6%
  • system 达到 22%
  • iowait 达到 10.3%
  • idle 为0
  • util 达到 85%

从 cpu 的调度情况来看,已经没有了可用的cpu资源,这里可以断定cpu已经达到极限。从 util 来看,程序的业务偏向于 I/O 密集型,对磁盘使用率很高,如果中途出现其他业务争抢资源,那么可能导致性能下降更加严重。

那么什么情况下磁盘才达到瓶颈呢?见下图

可以看到 iowait 达到 44.3%,这已经很高了。再看 ulit 达到 106%,实际上这个命令对磁盘利用率的计算不是很准确,但大致接近,所以可以断定磁盘利用率已经达到了瓶颈。一些程序在做某些操作时,磁盘利用率会很高,但时间不会太长;但如果磁盘利用率一直达到饱和状态,那么可能程序真的出现了I/O瓶颈,这需要优化程序。

        

除了通过磁盘利用率来观察,还有一种直接的方法,就是测试硬盘的读写性能,看正常情况下硬盘的读写速度能到达多大,然后对比磁盘读写速率即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值