I/O分析

本文详细介绍了一系列磁盘性能监控和测试工具,如sar、slabtop、iostat、iotop、dd命令、pidstat及fio,涵盖内核活动报告、文件系统缓存、磁盘操作活动监视、磁盘I/O使用状况、硬盘读写速度测试等方面,适用于系统管理员和技术人员深入理解并优化存储性能。

1 sar 系统活动报告

-v:输出inode、文件和其他内核表的统计信息

  • dentunusd: 目录高速缓存中未被使用的条目数量
  • file-nr : 使用中的文件描述符个数
  • inode-nr : 使用中的inode个数

-d:输出每一个块设备的活动信息

  • DEV 磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
  • tps:每秒I/O的传输总数
  • rd_sec/s 每秒读取的扇区的总数
  • wr_sec/s 每秒写入的扇区的总数
  • avgrq-sz 平均每次次磁盘I/O操作的数量(扇区)
  • avgqu-sz 磁盘请求队列的平均长度
  • await await : 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
  • svctm平均每次IO请求的处理时间(毫秒为单位)
  • %util I/O请求占用的CPU百分比,值越高,说明I/O越慢

-b 查看I/O和传递速率的统计信息

  • tps 磁盘每秒钟的IO总数,等于iostat中的tps
  • rtps 每秒钟从磁盘读取的IO总数
  • wtps 每秒钟从写入到磁盘的IO总数
  • bread/s 每秒钟从磁盘读取的块总数
  • bwrtn/s 每秒钟此写入到磁盘的块总数

 

2 slabtop打印出有关内核slab缓存信息,其中有些用于文件系统缓存

-o 选项  只显示一次结果 如果不加-o选项将会不断的刷新屏幕

  • ext4_inode_cache  ext4 :的inode缓存
  • dentry : 目录缓存
  • inode_cache: inode缓存

3  iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况

  • -c:只显示系统CPU统计信息,即单独输出CPU结果,不包括磁盘结果
  • -d:单独输出磁盘结果,不包括CPU结果
  • -k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位
  • -x:输出更详细的io设备统计信息
  • -t: 时间戳输出
  • -z : 不显示空活动汇总
  • -p ALL : 引入每个分区的统计信息

用法:iostat [ 选项 ] [ <时间间隔> [ <次数> ]]

输出含义:

  • avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值。重点关注iowait值,表示CPU用于等待io请求的完成时间。
  • Device: 各磁盘设备的IO统计信息。各列含义如下:
  • tps: 每秒向磁盘设备请求数据的次数,包括读、写请求
  • BLK_read/s: 每秒从驱动器读入的数据量,单位为K。
  • BLK_wrtn/s: 每秒从驱动器写入的数据量,单位为K。
  • BLK_read: 读入数据总量,单位为K。
  • BLK_wrtn: 写入数据总量,单位为K。

输出含义:

  • rrqm/s : 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
  • wrqm/s : 每秒对该设备的写请求被合并次数
  • r/s : 每秒完成的读次数
  • w/s : 每秒完成的写次数
  • rkB/s : 每秒读数据量(kB为单位)
  • wkB/s : 每秒写数据量(kB为单位)
  • avgrq-sz : 平均每次IO操作的数据量(扇区数为单位  512B)
  • avgqu-sz : 平均等待处理的IO请求队列长度
  • await : 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
  • r_await : 每个读操作的平均耗时
  • w_await: 每个写操作的平均耗时
  • svctm: 平均每次IO请求的处理时间(毫秒为单位)
  • %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率 设备忙处理I/O请求百分比

 

4 iotop  是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘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 禁止头几行,非交互模式。有三种指定方式。

 

  • TID : 进程ID
  • PRIO: 优先级
  • USER:进程用户
  • DISK_READ : 磁盘每秒读速度
  • DISK_WRITE : 磁盘每秒写速度
  • SWAPIN : 减缓分区换入百分比
  • IO : IO占用半分比
  • COMMAND : 进程

 

可以在运行当中按o  只显示正在产生I/O的进程或线程

 

非交互模式把输出信息保存到文件当中,一遍统计分析

iotop -botq > iotest.txt &

 

非交互模式输出 进程号14966进程信息

 

5 dd命令测试硬盘读写速度

iflag=FLAGS               指定读的方式FLAGS,参见“FLAGS参数说明”
oflag=FLAGS              指定写的方式FLAGS,参见“FLAGS参数说明”

FLAGS 参数说明

direct                     读写数据采用直接IO方式;
sync                 读写数据采用同步IO,但是针对是元数据 

测试纯写性能

time dd if=/dev/zero of=/test.txt bs=1M count=10000 oflag=direct oflag=sync

测试纯读性能

首先清除内存的缓存,以确保这个文件确实是从驱动盘读取的

sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

time dd if=/test.txt of=/dev/null bs=1M count=10000 iflag=direct iflag=sync

 

6 pidstat 默认输出CPU使用情况,还可以使用-d输出磁盘I/O统计信息

d输出磁盘I/O统计信息

  • kB_rd/s:每秒读取KB数
  • kB_wr/s:每秒写入KB数
  • kB_ccwr/s:每秒取消的写入KB数

-t 打印每个线程的统计信息

  • TGID:主线程的表示
  • TID:   线程id

-p PID 打印指定PID统计信息

7 fio 第三方IO测试工具

安装

wget http://brick.kernel.dk/snaps/fio-2.1.10.tar.gz

tar -xf fio-2.1.10.tar.gz 
cd fio-2.1.10
./configure 
make && make install

参数说明:
filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机写和读的I/O
bs=16k 单次io的块文件大小为16k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30 本次的测试线程为30.
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息。
此外
lockmem=1g 只使用1g内存进行测试。
zero_buffers 用0初始化系统buffer。
nrfiles=8 每个进程生成文件的数量。
磁盘读写常用测试点:
1. Read=100% Ramdon=100% rw=randread (100%随机读)
2. Read=100% Sequence=100% rw=read (100%顺序读)
3. Write=100% Sequence=100% rw=write (100%顺序写)
4. Write=100% Ramdon=100% rw=randwrite (100%随机写)
5. Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30(70%顺序读,30%顺序写)
6. Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30(70%随机读,30%随机写)

随机读测试

fio --bs=4k  --iodepth=1 --direct=1 --rw=read --time_based --runtime=600  --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-read --size=50G --filename=/dev/vda1

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值