在平时的工作中,经常需要评估一些服务器的资源,磁盘IO是其中一个容易出现瓶颈的地方,那么我们通常需要预先知道该服务器上的磁盘IO能达到多少。在这里记录一下经常用到的一个用来测试磁盘读写能力的命令。

1. dd命令

dd 命令从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

主要参数说明:

  • if 指定读取的文件路径
  • of 指定输出的文件路径
  • bs 传输的每个数据块的大小
  • count 传输的数据块的数量
  • oflag/iflag=direct 表示测试时不使用cache,而是直接读写磁盘

测试磁盘的读性能

time dd if=test.file of=/dev/null  bs=2048 count=500000 iflag=direct

linux 磁盘读写异常监控 linux检查磁盘读写_linux

测试磁盘的写性能

time dd of=test.file if=/dev/zero  bs=2048 count=500000 oflag=direct

linux 磁盘读写异常监控 linux检查磁盘读写_ios_02


可以看到:加缓存和不加缓存标志的写速率差别很大。

/dev/null与/dev/zero的区别

  • /dev/null类似于一个“黑洞”,所有写入它的数据都会被“吃掉”,不占用磁盘空间;我们经常再重定向的时候使用它。
  • /dev/zero也是一个伪设备,可以用于向设备或文件写入字符串0。

2. sar命令

如果说dd命令是用来测磁盘IO的极限的话,那么sar命令就是用来查看当前磁盘IO的性能(不止可以测磁盘,还可以用来查看其它硬件的性能,后面有时间整理个全的)。

参数说明

  • -d参数代表查看磁盘性能
  • -p参数代表将 dev 设备按照 sda,sdb……名称显示,
  • 第一数字代表每隔多少秒采一次数值
  • 第二个数字代表总共采多少次数值

返回值说明

  • tps:每秒从物理磁盘I/O的次数
  • rd_sec/s:每秒读扇区的次数(一般情况下一个扇区的大小是512字节)
  • wr_sec/s:每秒写扇区的次数
  • avgrq-sz:平均每次设备I/O操作的数据大小(扇区)
  • avgqu-sz:磁盘请求队列的平均长度
  • await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒)
  • svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
  • %util:I/O请求占CPU的百分比,比率越大,说明越饱和

linux 磁盘读写异常监控 linux检查磁盘读写_centos_03

3. iostat命令

iostat命令与sar的使用类似,不过主要是用来测量磁盘IO性能的,没有sar的功能那么丰富。

基本用法:iostat [ 选项 ] [ <时间间隔> [ <次数> ]] 主要选项:
-c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d:单独输出Device结果,不包括cpu结果
-k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位
-x:输出更详细的io设备统计信息
interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出

linux 磁盘读写异常监控 linux检查磁盘读写_ios_04