原文链接:https://blog.csdn.net/qq_20332637/article/details/82146753

iostat用于输出CPU和磁盘I/O相关的统计信息,iostat 也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

基本语法

语法格式:
iostat <options> <device name>

常用选项:
-c 只显示 CPU 的信息
-d 只显示设备信息
--human 以友好的方式显示结果
-j { ID | LABEL | PATH | UUID | ... }  显示设备的持久化名称
-k  以 k 为单位显示
-m 以 m 为单位显示
-N 显示任何设备映射器设备的注册设备映射器名称,用于查看LVM2统计数据
-p [ { device [,...] | ALL } ] 显示块设备及其分区的信息
-t 显示每次输出的时间
-V 显示 iostat 的版本信息
-x 显示更多的设备列
-z 如果没有变化就不重复输出信息
interval 连续输出,每 interval 秒输出一次
count 与 interval 连用,指定一共输出多少次

1.不加选项执行iostat

单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。

以上输出中,包含三部分:

选项 说明
第一行 最上面指示系统版本、主机名和当前日期
avg-cpu 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
Device 各磁盘设备的IO统计信息

avg-cpu中各列参数含义如下:

选项 说明
Device 设备名称
tps 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。
Blk_read/s 每秒读取的磁盘块的数量。
Blk_wrtn/s 每秒写入的磁盘块的数量。
Blk_read 读取的块的总数。
Blk_wrtn 写入的总块数。

Device中各列参数含义如下:

选项 说明
%user CPU在用户态执行进程的时间百分比。像 shell 程序、各种语言的编译器、数据库应用、web 服务器和各种桌面应用都算是运行在用户地址空间的进程。这些程序如果不是处于 idle 状态,那么绝大多数的 CPU 时间都是运行在用户态。
%nice CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比
%system CPU处在内核态执行进程的时间百分比。所有进程要使用的系统资源都是由 Linux 内核处理的。当处于用户态(用户地址空间)的进程需要使用系统的资源时,比如需要分配一些内存、或是执行 IO 操作、再或者是去创建一个子进程,此时就会进入内核态(内核地址空间)运行。事实上,决定进程在下一时刻是否会被运行的进程调度程序就运行在内核态。对于操作系统的设计来说,消耗在内核态的时间应该是越少越好。在实践中有一类典型的情况会使 sy 变大,那就是大量的 IO 操作,因此在调查 IO 相关的问题时需要着重关注它。
%iowait CPU用于等待I/O操作占用CPU总时间的百分比,若%iowait 的值过高,表示硬盘存在I/O瓶颈 
%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比
%idle CPU空闲时间百分比,若%idle 的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量,若 %idle 的值持续低于10,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是 CPU ,一般情况下, user + nice + idle 应该接近 100%。如果%idle值高,表示CPU较空闲

我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。

2.指定采样时间间隔与采样次数

与sar命令一样,我们可以以”iostat interval [count] ”形式指定iostat命令的采样间隔和采样次数:

以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。

3.以kB为单位显示读写信息(-k选项)/以mB为单位显示读写信息(-m选项)

我们可以使用-k选项,指定iostat的部分输出结果以kB为单位,而不是以扇区数为单位:

4.更详细的io统计信息(-x选项)

为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:

对于以上示例输出,我们可以获取到以下信息: 
- 每秒向磁盘上写30M左右数据(wkB/s值) 
- 每秒有91次IO操作(r/s+w/s),其中以写操作为主体 
- 平均每次IO请求等待时间为120.57毫秒,处理时间为6.33毫秒 
- 等待处理的IO请求队列中,平均有11.79个请求驻留

以上各列的含义如下:

选项 说明
rrqm/s 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s 每秒对该设备的写请求被合并次数
r/s 每秒完成的读请求次数
w/s 每秒完成的写请求次数
rkB/s 每秒读数据量(kB为单位)
wkB/s 每秒写数据量(kB为单位)
avgrq-sz 平均每次IO操作的数据量(扇区数为单位)
avgqu-sz 平均等待处理的IO请求队列长度
await 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位),awit过大,说明磁盘操作存在问题
svctm 平均每次IO请求的处理时间(毫秒为单位)
%util 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率,util是1的话,说明磁盘读写是有问题,需要优化磁盘读写频率
sec/s 每秒从设备读取或写入的扇区数
rsec/s 每秒从设备读取的扇区数。
wsec/s 每秒写入设备的扇区数。
rqm/s 每秒钟排队到设备的合并后的 I/O 请求数量。
%rrqm 在发送到设备之前合并到一起的读请求的百分比。
%wrqm 在发送到设备之前合并到一起的写请求的百分比。
areq-sz 向设备发出的 I/O 请求的平均大小(单位为 k)。
rareq-sz 向设备发出的读请求的平均大小(单位为 k)。
wareq-sz 向设备发出的写请求的平均大小(单位为 k)。
r_await 平均每次读请求的时间(以毫秒为单位)。这包括请求在队列中花费的时间和执行它们所花费的时间。
w_await 平均每次写请求的时间(以毫秒为单位)。这包括请求在队列中花费的时间和执行它们所花费的时间。
aqu-sz 发送到设备的请求的平均队列长度。

实际查看时,一般结合着多个选项查看: 如iostat -dxm 3

5,显示指定磁盘信息

iostat -d /dev/sda

iostst的更多相关文章

  1. Linux入门-第六周

    1.总结IP地址规划 IP地址的合理规划是网络设计中最重要的一环,在大型网络中必须对IP地址进行统一规划并得到实施.IP地址规划的好坏影响到网络路由协议算法的效率,影响到网络的性能,影响到网络的拓展, ...

随机推荐

  1. Gym101612L Little Difference

    题目链接:https://vjudge.net/problem/Gym-101612L 知识点: 数学 题目大意: 给一个数 \(n(1 \le n \le 10^{18})\),要求将 \(n\) ...

  2. 【MySQL】覆盖索引和回表

    先来了解一下两大类索引 聚簇索引(也称聚集索引,主键索引等) 普通索引(也成非聚簇索引,二级索引等) 聚簇索引 如果表设置了主键,则主键就是聚簇索引 如果表没有主键,则会默认第一个NOT NULL,且 ...

  3. [Objective-C] 009_Foundation框架之NSDictionary与NSMutableDictionary

    在Cocoa Foundation中NSDictionary和NSMutableDictionary 用于对象有序集合,NSDictionary和NSMutableDictionary 与 NSArr ...

  4. 【朝夕技术专刊】RabbitMQ路由解析(上篇)

    欢迎大家阅读<朝夕Net社区技术专刊> 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦! 上篇文章介绍了如 ...

  5. Rocket - diplomacy - 模块结构信息

    https://mp.weixin.qq.com/s/cTRxXwWNEeb4-XX_t4bRcg   讨论模块结构信息的来源及使用方式.     ​​   1. diplomacy   diplom ...

  6. Chisel3 - model - Hardware Model

    https://mp.weixin.qq.com/s/x6j7LZg7i7i_KcNEA8YCQw   Chisel作为领域专用语言(DSL),用于构建硬件模型.待硬件模型建立后,再基于模型进行仿真. ...

  7. Java实现 LeetCode 700 二叉搜索树中的搜索(遍历树)

    700. 二叉搜索树中的搜索 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 例如, 给定二叉搜 ...

  8. Java实现 蓝桥杯VIP 算法训练 水仙花数

    这道题有两个方法,第一个就相对来说通俗易懂 第二个可以用到Java的一些方法 public class 水仙花数1 { public static void main(String[] args) { ...

  9. Java实现 LeetCode 292 Nim游戏

    292. Nim 游戏 你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解 ...

  10. Java实现 LeetCode 115 不同的子序列

    115. 不同的子序列 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字 ...