linux 磁盘IO性能状态监控分析命令

linux | 2019-09-13 10:02:39

方法一:top 命令

# top
top - 15:12:56 up 64 days, 21:18,  1 user,  load average: 3.88, 7.20, 8.13
Tasks: 526 total,   1 running, 525 sleeping,   0 stopped,   0 zombie
%Cpu(s): 25.4 us,  0.5 sy,  0.0 ni, 74.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

具体的参数解释如下:

  Tasks: 526 total 进程总数

  1 running 正在运行的进程数

  525 sleeping 睡眠的进程数

  0 stopped 停止的进程数

  0 zombie 僵尸进程数


  Cpu(s):

  25.4% us 用户空间占用CPU百分比

  0.5% sy 内核空间占用CPU百分比

  0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比

  74.1% id 空闲CPU百分比

  0.0% wa 等待输入输出的CPU时间百分比

0.0% wa 的百分比可以大致的体现出当前的磁盘io请求是否频繁。如果 wa的数量比较大,说明等待输入输出的的io比较多。


方法二:vmstat 命令

# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
44  0 2637244 1792992      0 22761468    0    0    29    31    0    0  4  1 95  0  0


vmstat参数解释:

  Procs

  r: 等待运行的进程数 b: 处在非中断睡眠状态的进程数 w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但 linux 并不耗尽交换空间

  Memory

  swpd: 虚拟内存使用情况,单位:KB

  free: 空闲的内存,单位KB

  buff: 被用来做为缓存的内存数,单位:KB

  Swap

  si: 从磁盘交换到内存的交换页数量,单位:KB/秒

  so: 从内存交换到磁盘的交换页数量,单位:KB/秒

  IO

  bi: 发送到块设备的块数,单位:块/秒

  bo: 从块设备接收到的块数,单位:块/秒

  System

  in: 每秒的中断数,包括时钟中断

  cs: 每秒的环境(上下文)切换次数

  CPU

  按 CPU 的总使用百分比来显示

  us: CPU 使用时间

  sy: CPU 系统使用时间

  id: 闲置时间

       wa 等待IO时间 Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。


vmstat -d 可以显示详细磁盘信息

# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda   51544212 4376046 15326237580 1528893285 77378992 6087788 16849888943 1237001225      0 151573
sr0       18      0    2056      72      0      0       0       0      0      0
dm-0  359607      0 17168007 1936150 10555541      0 195526291 49722767      0  14768
dm-1  1377643      0 11029344 7709149 2299406      0 18395248 25937000      0    904
dm-2  54342484      0 15297982937 2134548820 70611793      0 16635742795 1265693658      0 140203

total: 总的成功读写次数

sectors: 成功读写的扇区

ms: 读写花费的毫秒数

merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作.

vmstat 当然也可以作为 IO,cpu,内存性能瓶颈的分析


方法三:iostat 命令

# iostat
Linux 3.10.0-957.10.1.el7.x86_64 (master) 05/30/2019 _x86_64_(48 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.98    0.00    0.63    0.08    0.00   95.31
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              22.99      1366.56      1502.50 7663119794 8425406616
scd0              0.00         0.00         0.00       1028          0


avg-cpu 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值

Device 各磁盘设备的IO统计信息


%user CPU在用户态执行进程的时间百分比。

%nice CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比

%system CPU处在内核态执行进程的时间百分比

%iowait CPU用于等待I/O操作占用CPU总时间的百分比

%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比

%idle CPU空闲时间百分比


tps 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。

Blk_read/s 每秒读取的数据块。块相当于内核2.4或更高版本的扇区,因此大小为512字节。对于较老的内核,块的大小是不确定的

Blk_wrtn/s 每秒写入的数据块.

Blk_read 取样时间间隔内读扇区总数量

Blk_wrtn 取样时间间隔内写扇区总数量


1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈 

2. 若 %idle 的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量 

3. 若 %idle 的值持续低于1,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是 CPU


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









登录后即可回复 登录 | 注册
    
关注编程学问公众号