Linux的ststus低7位,Linux IO Status

此文介绍一下IO监控相关的命令,iostat和iotop

iostat

iostat是监控linux系统io状态的首选命令,极其强大,基本可以满足90%的监控需求,下面看看常见的用法

iostat

Linux 2.6.32-431.el6.x86_64 (Test-Centos) 08/06/2014 _x86_64_ (2 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

1.15 0.00 0.03 0.45 0.00 98.37

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

scd0 0.00 0.00 0.00 352 0

sda 1.71 8.87 38.22 22224068 95730800

这个是iostat在无参数情况下的输出,第一行显示的是当前服务器的系统版本,位数,CPU数;第二个部分显示的当前的CPU信息,虽然名字叫iostat,居然还能显示CPU的统计信息,看来Sebastien Godard是个蛮蛋疼的人;第三个部分显示的才是正经的IO信息,对于IO部分的几个参数解释如下

Device:统计的设备

tps:磁盘IO请求的数量,多个逻辑的IO请求可能被统一为一个磁盘IO请求

Blk_read/s:每秒读取的块的数量

Blk_wrtn/s:每秒写入的块的数量

Blk_read:总共读取的块数量

Blk_wrtn:总共写入的块数量

iostat -d -k 1

Linux 2.6.32-431.el6.x86_64 (Test-Centos) 08/06/2014 _x86_64_ (2 CPU)

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

scd0 0.00 0.00 0.00 176 0

sda 1.71 4.44 19.10 11112034 47866220

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

scd0 0.00 0.00 0.00 0 0

sda 0.00 0.00 0.00 0 0

-d选项指定显示磁盘信息,而不再显示CPU的信息了,-k表示将不再使用块为计数单位而是用更加可读的KB作为单位,如果想使用MB作为计数的话可以使用-m参数;最后跟的参数1表示每一秒显示一次。这里结果显示的几个参数就不再描述了,只是把单位块换成了KB而已,意思很容易明白。

iostat -d -k -x 1

Linux 2.6.32-431.el6.x86_64 (Test-Centos) 08/07/2014 _x86_64_ (2 CPU)

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util

scd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 0.59 0.59 0.00

sda 0.03 3.18 0.12 1.60 4.43 19.10 27.48 0.03 17.57 6.12 1.05

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util

scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

-x参数是iostat命令一个强大的扩展,可以显示更加详细的信息,这里一一解释

rrqm/s:每秒读请求合并(merge)的次数,在linux中,如果虚拟文件系统(VFS)发现请求可以被合并到同一个文件块中,那么会将请求合并为一次执行

wrqm/s:每秒写请求合并(merge)的次数

r/s:每秒读请求的次数

w/s:每秒写请求的此时

rkB/s:每秒读取的KB数量

wkB/s:每秒写入的KB数量

avgrq-sz:平均请求所占用的扇区的大小

avgqu-sz:请求队列的平均长度

await:每个IO请求等待的时间长度,单位是毫秒。这里的时间越长表示IO越繁忙,如果等待的IO数量持续在高位,就要检查一下什么进程在占用大量IO了,阈值5ms

svctm:平均每次IO请求执行的时间,不过man显示这列的值其实并不准确,以后的版本中可能移除

%util:IO对于CPU的使用率,这个值并不能直接反应IO的繁忙程度,因为可能这段时间的CPU确实都在处理IO,没有其他的事情可做,这时显示的值确实会很高,但不表示IO繁忙

iotop

iotop的使用很类似top命令,可以用来查看到底什么进程占用了IO,并且它是基于线程的,实际看下

iotop

Total DISK READ: 791.31 K/s | Total DISK WRITE: 5.30 M/s

TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND

281 be/3 root 0.00 B/s 93.10 K/s 0.00 % 45.44 % [jbd2/sda3-8]

29085 be/4 mysql 3.88 K/s 2.31 M/s 0.00 % 14.91 % mysqld –basedir=/usr/~mysql.sock –port=3306

29077 be/4 mysql 0.00 B/s 752.52 K/s 0.00 % 9.02 % mysqld –basedir=/usr/~mysql.sock –port=3306

18228 be/4 mysql 7.76 K/s 34.91 K/s 0.00 % 7.95 % mysqld –basedir=/usr/~mysql.sock –port=3306

19419 be/4 mysql 7.76 K/s 42.67 K/s 0.00 % 7.29 % mysqld –basedir=/usr/~mysql.sock –port=3306

19650 be/4 mysql 3.88 K/s 15.52 K/s 0.00 % 6.58 % mysqld –basedir=/usr/~mysql.sock –port=3306

29075 be/4 mysql 0.00 B/s 783.56 K/s 0.00 % 5.04 % mysqld –basedir=/usr/~mysql.sock –port=3306

29083 be/4 mysql 3.88 K/s 7.76 K/s 0.00 % 4.31 % mysqld –basedir=/usr/~mysql.sock –port=3306

19415 be/4 mysql 7.76 K/s 54.31 K/s 0.00 % 3.85 % mysqld –basedir=/usr/~mysql.sock –port=3306

19652 be/4 mysql 7.76 K/s 27.15 K/s 0.00 % 3.02 % mysqld –basedir=/usr/~mysql.sock –port=3306

19649 be/4 mysql 3.88 K/s 11.64 K/s 0.00 % 2.77 % mysqld –basedir=/usr/~mysql.sock –port=3306

19647 be/4 mysql 3.88 K/s 11.64 K/s 0.00 % 2.70 % mysqld –basedir=/usr/~mysql.sock –port=3306

29078 be/4 mysql 0.00 B/s 543.06 K/s 0.00 % 1.79 % mysqld –basedir=/usr/~mysql.sock –port=3306

19418 be/4 mysql 3.88 K/s 15.52 K/s 0.00 % 1.65 % mysqld –basedir=/usr/~mysql.sock –port=3306

18268 be/4 mysql 3.88 K/s 23.27 K/s 0.00 % 1.53 % mysqld –basedir=/usr/~mysql.sock –port=3306

19653 be/4 mysql 0.00 B/s 7.76 K/s 0.00 % 0.83 % mysqld –basedir=/usr/~mysql.sock –port=3306

19648 be/4 mysql 0.00 B/s 7.76 K/s 0.00 % 0.00 % mysqld –basedir=/usr/~mysql.sock –port=3306

19651 be/4 mysql 0.00 B/s 3.88 K/s 0.00 % 0.00 % mysqld –basedir=/usr/~mysql.sock –port=3306

29076 be/4 mysql 0.00 B/s 310.32 K/s 0.00 % 0.00 % mysqld –basedir=/usr/~mysql.sock –port=3306

29097 be/4 mysql 0.00 B/s 3.88 K/s 0.00 % 0.00 % mysqld –basedir=/usr/~mysql.sock –port=3306

19416 be/4 mysql 0.00 B/s 7.76 K/s 0.00 % 0.00 % mysqld –basedir=/usr/~mysql.sock –port=3306

我在iotop前执行了一个基准测试,可以看到这里mysql使用的系统线程,以及每个线程对应的IO读写数量

pt-ioprofile

这个是percona-tools工具包的一部分,可以用来监控某个进程在一段时间内的对特定文件的读写量,可以使用这个工具来监控数据的热点在哪个表

pt-ioprofile --profile-pid --run-time=60

–profile-pid表示使用的进程ID,如果不使用这个参数,默认情况下,会自动检测本地的mysql进程mysqld,–run-time表示一次检测收集信息的时长,单位是秒,默认是30。

引用:

man iostat

man iotop

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值