iostat是Linux中被用来监控系统的I/O设备活动情况的工具,是input/output statistics的缩写。它可以生成三种类型的报告:

  1. CPU利用率报告
  2. 设备利用率报告
  3. 网络文件系统报告

iostat通过生成的报告来帮助管理员更好的调整系统设置来平衡各个物理磁盘之间的I/O负载。

Linux里iostat命令是在包含在系统包sysstat当中的,如果没有iostat命令则需事先安装sysstat系统包,可用yum命令来进行安装:

# yum install sysstat -y

主要说明

iostat [OPTION] [DEVICE] [INTERVAL [count]]

详细参数说明可以参考:http://man7.org/linux/man-pages/man1/iostat.1.html

报告说明

这里主要以经常用到的CPU磁盘I/O分析需要用到的报告为主。

CPU利用率报告(CPU Utilization Report)

如果服务器是多核CPU,则数值为所有核心数值的平均值。

%user: CPU处在用户(应用)级别的利用率百分比。
%nice:CPU处在用户级别且有`NICE`值的利用率百分比。
%system:CPU处在系统(内核)级别的利用率百分比。
%iowait:CPU等待系统I/O请求的时间百分比。
%steal:虚拟CPU无意识等待系统程序处理另外的虚拟处理器所花费时间的百分比。
%idle:CPU空闲的时间百分比。

设备利用率报告(Device Utilization Report)

Device:显示的是设备名或者是分区名。不同的内核版本有不同的显示方式。
tps:设备每秒的传输次数。一次传输就是对设备一次的`I/O`请求,多次的逻辑请求可以合并成单个`I/O`请求。
Blk_read/s:每秒从设备读取的数据量,以`BLOCK`方式计算,在内核`2.4`及之后版本中,每个`BLOCK`的大小为512字节。
Blk_wrtn/s:每秒写入设备的数据量。
Blk_read:总共读取的`BLOCK`数量。
Blk_wrtn:总共写入的`BLOCK`数量。
kB_read/s:每秒从设备读取的数据量,单位`KB`。
kB_wrtn/s:每秒写入设备的数据量,单位`KB`。
kB_read:总共从设备读取的数据量,单位`KB`。
kB_wrtn:总共写入设备的数据量,单位`KB`。
MB_read/s、MB_wrtn/s、MB_read、MB_wrtn:参考上述的信息描述,单位为`MB`。
rrqm/s:每秒合并的读请求数,当请求排队到设备时。
wrqm/s:每秒合并的写请求数,当请求排队到设备时。
r/s:每秒发送给设备的读请求数。
w/s:每秒发送给设备的写请求数。
rsec/s:每秒从设备读取的扇区数量。
wsec/s:每秒写入设备的扇区数量。
rkB/s:每秒从设备读取的`KB`数。
wkB/s:每秒写入设备的`KB`数。
rMB/s、wMB/s:参考上述的信息描述,单位为`MB`。
avgrq-sz:发送给设备请求的平均大小(以扇区为单位)。
avgqu-sz:发送给设备请求队列的平均长度。
await:发送给设备`I/O`请求的平均响应时间,单位是毫秒。包含请求于队列中的时间和服务于队列中的时间。
svctm:发送给设备`I/O`请求的平均服务时间。将在之后版本的`iostat`移除这个指标。
%util:发送给设备`I/O`请求消耗的时间的百分比。

主要选项

-c:显示CPU利用率报告。
-d:显示设备利用率报告。
-k:输出统计信息以`KB/S`显示。
-m:输出统计信息以`MB/S`显示。
-N:显示逻辑卷(LVM)的信息。
-n:显示NFS的信息。
-p [ { device [,...] | ALL } ]:显示指定的磁盘设备或者分区信息。
-t:显示报告的时间。timestamp格式由环境变量`S_TIME_FORMAT`决定。
-x:显示扩展的统计信息。
-y:忽略从系统启动到当前时间第一份报告。
-z:忽略显示不活动设备的信息。

主要用法

1、所有设备的负载情况

# iostat

Linux 2.6.32-358.el6.x86_64 (db) 10/25/2018 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle
0.60 0.00 0.39 0.42 0.00 98.60 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 1.83 0.84 26.61 1437902 45525316

OR

# iostat -x

Linux 2.6.32-358.el6.x86_64 (db) 10/25/2018 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle
0.60 0.00 0.39 0.42 0.00 98.60 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.01 1.38 0.03 1.81 0.84 26.61 14.97 0.01 3.23 4.01 3.21 2.89 0.53

2、显示CPU信息

# iostat -c 1 5
Linux 2.6.32-358.el6.x86_64 (db)        10/25/2018      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
0.60 0.00 0.39 0.42 0.00 98.60 avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 10.00 0.00 90.00 avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00 avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00 avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00

3、显示TPS

# iostat -d -k 1 3
Linux 2.6.32-358.el6.x86_64 (db)        10/25/2018      _x86_64_        (1 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda 1.83 0.42 13.30 718951 22763214 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.00 0.00 0.00 0 0 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.00 0.00 0.00 0 0

4、显示设备使用率(%util)和响应时间(await)

# iostat -d -k -x 1 3
Linux 2.6.32-754.2.1.el6.x86_64 (db)  10/25/2018      _x86_64_        (24 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda 0.01 61.87 0.13 62.10 11.18 479.23 15.76 0.01 0.13 0.05 0.31 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 4.00 1.00 16.00 8.00 80.00 10.35 0.01 0.71 0.71 1.20 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 1.00 0.00 12.00 0.00 52.00 8.67 0.00 0.17 0.17 0.20

注意:

以上主要用法都是所有设备的信息,如果需要指定某个设备,则可以加设备名进行单独显示;

如果不包含服务器开机至今第一次统计信息的展示,则需要加上选项-y去除。

总结

  • %util如果接近于100%,则表明磁盘一直在处理I/O请求,系统I/O是满负载状态,磁盘可能会存在I/O瓶颈,因为如有多个磁盘并发,并不一定说明磁盘有瓶颈;
  • 响应时间await时间一般要低于5ms(<5ms),如果超过10ms(>10ms)就比较大了;
  • %idle如果少于30%,则I/O压力就比较大。

参考

☆〖本人水平有限,文中如有错误还请留言批评指正!〗☆

最新文章

  1. 优化curl并发使用
  2. JavaScript高阶函数
  3. union内嵌struct用法
  4. python 定义类方法
  5. 【原】iOS动态性(一):动态添加属性的方法——关联(e.g. 向Category添加属性)
  6. Windows Server 2008 R2怎样设置自动登陆
  7. 关于URL编码/javascript/js url 编码
  8. inux环境PHP7.0安装
  9. POJ2686 Traveling by Stagecoach(状压DP+SPFA)
  10. win7下如何安装JDK
  11. tomcat多域名配置
  12. [转] 考验你的JavaScript底细
  13. 如何用java比较两个时间或日期的大小
  14. $.ajax()方法详解 jquery中的ajax方法
  15. 大数据征信的应用和启示:ZestFinance的基于大数据的信用评估技术
  16. 总结css常用方法
  17. 数据驱动-参数化(Parameters)
  18. 如何用java完成一个中文词频统计程序
  19. [VS2008] [.NET 3.5] 如何解决 The imported project &quot;C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.CSharp.targets&quot; was not found
  20. C# 算法题系列(一) 两数之和、无重复字符的最长子串

热门文章

  1. RAID5的创建(5块磁盘,三块做raid,两块做备份)
  2. TensorFlow Federated:基于分散式数据的机器学习
  3. 用maven运行指定java类main方法
  4. 2018年蓝桥杯A组C/C++决赛题目
  5. day76_10_23自定义签发token,其他drf组件
  6. CF-55 C.Pie or die
  7. Vue 使用lodash库减少watch对后台请求压力
  8. Tomca原理分析之责任链
  9. [LeetCode#178]Rank Scores
  10. python 使用队列实现线程同步