Linux性能优化之磁盘优化 磁盘优化有什么用( 二 )




[root@localhost ~]# iostat
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 2017年09月18日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.74 0.00 1.24 1.35 0.00 96.67
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 14.43 456.85 60.82 218580 29098
scd0 0.02 0.09 0.00 44 0
dm-0 13.65 404.58 56.50 193571 27030
dm-1 0.27 2.23 0.00 1068 0
参数说明

  • tps: 每秒事物数(IOPS) 。
  • kB_read/s、kB_wrtn/s: 每秒读取KB数和每秒写入KB数 。
  • kB_read、kB_wrtn: 总共读取和写入的KB数 。
如下想输出更详细的内容,可以试试下面这个命令组合:


[root@localhost ~]# iostat -xkdz 1
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 2017年09月18日 _x86_64_ (1 CPU)
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.01 2.43 13.81 2.32 510.51 67.96 71.74 0.22 13.94 8.72 44.95 2.37 3.82
scd0 0.00 0.00 0.03 0.00 0.10 0.00 8.00 0.00 0.27 0.27 0.00 0.27 0.00
dm-0 0.00 0.00 10.52 4.73 452.10 63.13 67.56 0.44 28.56 10.41 68.93 2.47 3.76
dm-1 0.00 0.00 0.30 0.00 2.49 0.00 16.69 0.00 1.50 1.50 0.00 1.38 0.04
参数说明
  • rrqm/s:每秒合并放入驱动请求队列的读请求数(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge) 。
  • wrqm/s:每秒合并放入驱动请求队列的写请求数 。
  • rsec/s:每秒发给磁盘设备的读请求数 。
  • wsec/:每秒发给磁盘设备的写请求数 。
  • rKB/s:每秒从磁盘设备读取的KB数 。
  • wKB/s:每秒向磁盘设备写入的KB数 。
  • avgrq-sz 平均每次请求大小,单位为扇区(512B) 。
  • avgqu-sz 在驱动请求队列和在设备中活跃的平均请求数 。
  • await: 平均I/O响应时间,包括在驱动请求队列里等待和设备的I/O响应时间(ms) 。一般地系统I/O响应时间应该低于5ms,如果大于10ms就比较大了 。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题 。
  • svctm:磁盘设备的I/O平均响应时间(ms) 。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长系统上运行的应用程序将变慢 。
  • %util: 设备忙处理I/O请求的百分比(使用率) 。在统计时间内所有处理IO时间,除以总共统计时间 。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度 。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈) 。
【Linux性能优化之磁盘优化 磁盘优化有什么用】既然avgrq-sz是合并之后的数字,小尺寸(16个扇区或者更小)可以视为无法合并的实际I/O负载的迹象 。大尺寸有可能是大I/O,或者是合并的连续负载 。输出性能里最重要的指标是await 。如果应用程序和文件系统使用了降低写延时的方法,w_await可能不那么重要,而更应该关注r_await 。
对于资源使用和容量规划,%util仍然很重要,不过记住这只是繁忙度的一个度量(非空闲时间),对于后面有多块磁盘支持的虚拟设备意义不大 。可以通过施加负载更好地了解这些设备:IOPS(r/s + w/s)以及吞吐量(rkB/s + wkB/s) 。
iotop
包含磁盘I/O的top工具 。
批量模式(-b)可以提供滚动输出 。下面的演示仅仅显示I/O进程(-o),每5秒输出一次(-d5):
[root@localhost ~]# iotop -bod5


Total DISK READ : 0.00 B/s | Total DISK WRITE : 8.76 K/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 24.49 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
21203 be/3 root 0.00 B/s 815.58 B/s 0.00 % 0.01 % [jbd2/dm-2-8]
22069 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.01 % [jbd2/dm-1-8]
1531 be/0 root 0.00 B/s 6.37 K/s 0.00 % 0.01 % [loop0]
3142 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.01 % [kworker/7:0]
21246 be/4 root 0.00 B/s 1631.15 B/s 0.00 % 0.00 % java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start