I/O相关的应用通常用来处理大量数据,需要大量内存和存储,频繁I/O操作读、写数据
前言
IO 是运维过程中比较关注的点。阅读Linux性能监测:IO篇
实操
说到实际的,那就要说说实际运维工作中,如何发现IO性能瓶颈
iostat。通过这个神器,就可以监视具体的磁盘性能了。
iostat -x 1 20
每一秒显示一次详细信息,共显示20次。 -x 显示详细信息 / -d 显示磁盘使用情况
1 | [user1@Test_Server ~]$ iostat -x |
具体解释详细请阅读Linux iostat命令详解
关注性能监控指标
- %iowait: 如果该值较高,表示磁盘存在I/O瓶颈
- await: 一般地,系统I/O响应时间应该低于5ms,如果大于10ms就比较大了。另一方面如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。
- %util: 一秒中有百分之多少的时间用于I/O操作,即被IO消耗的CPU百分比,一般地,如果该参数是100%表示设备已经接近满负荷运行了
- avgqu-sz: 如果avgqu-sz比较大,也表示有当量io在等待。如果单块磁盘的队列长度持续超过2,一般认为该磁盘存在I/O性能问题。
但是,在实际运维工作中,都希望找到是哪个进程消耗了IO,所以终极目的是找到这个进程ID。可是通过 iostat 都没法达到目的。
所以,神器pidstat命令就登场了,通过这个命令,就可以知道是谁在后台偷用IO了。
pidstat 是 sysstat 工具的一个命令,如果服务器上没有现成的,不要着急。CentOS 使用yum install sysstat
安装
使用 -d 选项,可以查看进程IO的统计信息
1 | [root@massive-dataset-new-002 ~]# pidstat -d 1 |
1 | kB_rd/s: 每秒进程从磁盘读取的数据量(以kB为单位) |
具体解释详细请阅读Linux pidstat命令详解
现在定位到进程级别了,很多时候,需要知道这个进程到底打开了哪些文件,这个进程到底和哪些进程关联,这个时候就不得不提到lsof命令了。
lsof -p 20711
列出指定进程打开的文件列表
具体解释详细请阅读Linux lsof命令详解
总结
排查问题所使用的工具大而全的知识一时半会记不全。要多练习多思考