深入了解使用linux查看磁盘io使用情况

五种方法 top命令、vmstat命令、iostat命令、iotop命令、pt-ioprofile命令(附安装包和使用方法)

一、 top命令

top - 11:41:22 up 51 min, 2 users, load average: 0.01, 0.04, 0.01

Tasks: 130 total, 1 running, 129 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.2%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 4151760k total, 2284628k used, 1867132k free, 47892k buffers

Swap: 4192956k total, 0k used, 4192956k free, 2145020k cached

分析:查看0.4%wa这里,IO等待所占用的CPU时间的百分比,高过30%时IO压力高

具体的解释如下:

  Tasks: 130 total 进程总数

  1 running 正在运行的进程数

  129 sleeping 睡眠的进程数

  0 stopped 停止的进程数

  0 zombie 僵尸进程数

  Cpu(s):

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

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

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

  99.2% id 空闲CPU百分比

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

  0.0% hi

  0.0% si

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

需要的小伙伴私信回复内核免费领取

二、vmstat命令

命令:vmstat 2 5(每两秒执行一次,执行5次)

vmstat参数解释:

Procs

r: 等待运行的进程数

b: 处在非中断睡眠状态的进程数

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: 闲置时间


三、iostat 使用

安装命令: yum install sysstat

使用iostat -d -k 2 查看IO情况:

-k:已kb为单位显示读写信息

-m:已mb为单位显示读写信息

使用iostat -x 5 查看IO情况:

-x:更详细的io设备统计信息

选项 说明

rrqm/s	每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s	每秒对该设备的写请求被合并次数
r/s	        每秒完成的读次数
w/s	        每秒完成的写次数
rkB/s	每秒读数据量(kB为单位)
wkB/s	每秒写数据量(kB为单位)
avgrq-sz	平均每次IO操作的数据量(扇区数为单位)
avgqu-sz	平均等待处理的IO请求队列长度
await	平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm	平均每次IO请求的处理时间(毫秒为单位)
%util	采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
ps:%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)


如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

四、iotop命令

安装命令:yum install iotop

查看哪个线程耗IO比较高、按 o 只显示有磁盘 IO 活动的进程。

各个参数说明:

  -o, --only只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
  -b, --batch非交互模式,一般用来记录日志。
  -n NUM, --iter=NUM设置监测的次数,默认无限。在非交互模式下很有用。
  -d SEC, --delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1。
  -p PID, --pid=PID指定监测的进程/线程。
  -u USER, --user=USER指定监测某个用户产生的I/O。
  -P, --processes仅显示进程,默认iotop显示所有线程。
  -a, --accumulated显示累积的I/O,而不是带宽。
  -k, --kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用。
  -t, --time 加上时间戳,非交互非模式。
  -q, --quiet 禁止头几行,非交互模式。有三种指定方式。
  -q 只在第一次监测时显示列名
  -qq 永远不显示列名。
  -qqq 永远不显示I/O汇总。
交互按键:
  和top命令类似,iotop也支持以下几个交互按键。
  left和right方向键:改变排序。  
  r:反向排序。
  o:切换至选项--only。
  p:切换至--processes选项。
  a:切换至--accumulated选项。
  q:退出。
  i:改变线程的优先级。

五、pt-ioprofile命令

安装步骤:

1、安装依赖包:yum install -y perl perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl-Digest-MD5 perl-ExtUtils-MakeMaker

2、下载:wget https://www.percona.com/downloads/percona-toolkit/3.0.13/binary/redhat/7/x86_64/percona-toolkit-3.0.13-1.el7.x86_64.rpm

3、安装rpm包:rpm -ivh percona-toolkit-3.0.13-1.el7.x86_64.rpm

使用方法:

pt-ioprofile --profile-pid=1236 --cell=sizes

pt-ioprofile的原理是对某个pid附加一个strace进程进行IO分析。

对于定位问题更有用的是通过IO的吞吐量来进行定位。使用参数 --cell=sizes,该参数将结果已 B/s 的方式展示出来

从上图可以看出IO负载的主要来源是jetty。

并且压力主要集中在读取上。

展开阅读全文

页面更新:2024-04-16

标签:磁盘   百分比   队列   线程   进程   命令   次数   单位   情况   时间   设备

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top