linux看磁盘吞吐里

2019-06-11 10:13:10 don_chiang709 阅读数 1612

一、dd命令的解释

dd命令主要是用来块拷贝一个指定大小的文件,并在拷贝的同时进行指定的转换。

注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2

参数注释:

1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

dd用于复制,从if读出,写到of。if=/dev/zero不产生IO,因此可以用来测试纯写速度。同理of=/dev/null不产生IO,可以用来测试纯读速度。bs是每次读或写的大小,即一个块的大小,count是读写块的数量。

3. ibs=bytes:一次读入的bytes个字节,即指定一个块大小为bytes个字节。

    obs=bytes:一次写入的bytes个字节,即指定一个块大小为bytes个字节。

    bs=bytes:同时设置读入/输出的块大小为bytes个字节。

4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。

7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

8. conv=conversion:用指定的参数转换文件。

  fdatasync  完成dd命令前,写文件数据到磁盘
  fsync     除文件数据外,同时也写元数据

9. iflag, oflag 的关键symbol:

dsync  用同步I/O操作数据

sync    除文件数据外,同时也写元数据

如果要规避掉文件系统cache,直接读写,不使用buffer cache,需做这样的设置
iflag=direct,nonblock
oflag=direct,nonblock

dd 命令三种经典使用方法:

dd if=/dev/zero of=test bs=64k count=16k  是不准确的,可能有数据存在内核缓存中,没有同步到磁盘上。对于关键数据应该加上fsync标识,防止关键数据丢失;

dd if=/dev/zero of=test bs=64k count=16k conv=fsync 较为稳妥,但是时间用时较长,他在dd结束前会写数据和文件元数据到磁盘;

dd if=/dev/zero of=test bs=64k count=4k oflag=dsync or sync  每写一次就写一次磁盘,在实际操作中,可以听到磁盘响声,用时较长;

 

二、测试磁盘写吞吐量

使用dd命令对磁盘进行标准写测试。使用一下命令行读取和写入文件,记住添加oflag参数以绕过磁盘页面缓存

dd if=/dev/zero of=here bs=1G count=1 oflag=direct

记录了1+0 的读入

记录了1+0 的写出

1073741824字节(1.1 GB)已复制,13.6518 秒,78.7 MB/秒

三、结合nc命令测试网络

Server1使用nc监听17480端口的网络I/O请求:


[root@server1 ~]# nc -v -l -n 17480 > /dev/null

Ncat: Version 6.40 ( http://nmap.org/ncat )

Ncat: Listening on :::17480

Ncat: Listening on 0.0.0.0:17480

Ncat: Connection from 192.168.0.97.

Ncat: Connection from 192.168.0.97:39156.

在Server2节点上发起网络I/O请求:

[root@server2 ~]# time dd if=/dev/zero | nc -v -n 192.168.0.99 17480

Ncat: Version 6.40 ( http://nmap.org/ncat )

Ncat: Connected to 192.168.0.99:17480.

^C记录了34434250+0 的读入

记录了34434249+0 的写出

17630335488字节(18 GB)已复制,112.903 秒,156 MB/秒

real    1m52.906s

user    1m23.308s

sys    2m22.487s

总结:

当然,测试磁盘I/O使用fio工具更好,因为fio支持多种ioengine(rdma/libaio/librbd/libhdfs等)和指定多线程/进程并发数等,另外,测试结果显示的性能更全面(磁盘延迟clat/磁盘利用率util等)。参考:linux 磁盘IO测试工具:FIO (简要介绍iostat工具)

2018-04-14 14:23:45 liuxiao723846 阅读数 8456

我们在线上linux服务器排查问题时,一般会通过top、free、netstat、df -h等命令排查cpu、内存、网络和磁盘等问题。有的时候我们需要更进一步了解磁盘io的使用情况,那么本文就是重点讲解一下如何查看linux的磁盘io信息的。

一、iostat:

1、基本用法:

$iostat -d -k 1 10
1)参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。


2)含义:

  • tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
  • kB_read/s:每秒从设备(drive expressed)读取的数据量;
  • kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
  • kB_read:读取的总数据量;
  • kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。

上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)

3)指定监控的设备名称为sda:

iostat -d sda 2

2、-x 参数:

1)使用-x参数我们可以获得更多统计信息。


2)含义:

  • rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
  • wrqm/s:每秒这个设备相关的写入请求有多少被Merge了;
  • rsec/s:每秒读取的扇区数;
  • wsec/:每秒写入的扇区数。
  • rKB/s:The number of read requests that were issued to the device per second;
  • wKB/s:The number of write requests that were issued to the device per second;
  • avgrq-sz 平均请求扇区的大小
  • avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。    
  • await:  每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
  • svctm    表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,         系统上运行的应用程序将变慢。
  • %util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。

一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

3、-c参数:

iostat还可以用来获取cpu部分状态值:

iostat -c 1 10
avg-cpu: %user %nice %sys %iowait %idle
1.98 0.00 0.35 11.45 86.22
avg-cpu: %user %nice %sys %iowait %idle
1.62 0.00 0.25 34.46 63.67

4、常用方法:

iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10      #查看设备使用率(%util)、响应时间(await) iostat -c 1 10 #查看cpu状态

实例:

iostat -d -x -k 1
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          1.56  28.31  7.84 31.50   43.65    3.16    21.82     1.58     1.19     0.03    0.80   2.61  10.29
sda          1.98  24.75 419.80  6.93 13465.35  253.47  6732.67   126.73    32.15     2.00    4.70   2.00  85.25
sda          3.06  41.84 444.90 54.08 14204.08 2048.98  7102.04  1024.49    32.57     2.10    4.21   1.85  92.24
可以看到磁盘的平均响应时间<5ms,磁盘使用率>80。磁盘响应正常,但是已经很繁忙了。

ostat -d -k 1 |grep sda10
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda10            60.72        18.95        71.53  395637647 1493241908
sda10           299.02      4266.67       129.41       4352        132
sda10           483.84      4589.90      4117.17       4544       4076
sda10           218.00      3360.00       100.00       3360        100
sda10           546.00      8784.00       124.00       8784        124
sda10           827.00     13232.00       136.00      13232        136
上面看到,磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB。


二、iotop:

1、iotop是一个用python编写的类似top界面的磁盘I/O监控工具。可以通过yum install iotop安装,运行该命令后如图:


  • DISK READ和DISK WRITE字段代表块设备在采样时间内的I/O带宽;
  • SWAPIN和IO字段表示当前进程或线程花费在页面换入和等待I/O的时间;
  • PRIO字段表示I/O优先级;
  • Total DISK READ和Total DISK WRITE表示总的I/O读写情况

2、常用参数:

-o --only 只显示实际具有I/O操作的进程或线程。可以通过快捷键o进行控制

-b --batch 非交互式模式,可以用于保存输出结果

-n 刷新次数

-d 刷新间隔时间

-P 只显示进程,不显示线程

-p 监控指定进程或线程

-k 使用KB表示I/O带宽。默认情况下,iotop使用B/s,K/s,M/s表示I/O带宽。

-u 监控指定用户的I/O操作情况

-t 在每行输出加上时间戳

-q 只在第一次输出时显示列名称

-qq 不显示列名称

-qqq 不显示总的I/O信息

$ sudo iotop -b -d 1 -n 5  -o  -u mongod -P  -p 1524  -qqq
 1524 be/4 mongod      0.00 B/s  527.27 K/s  0.00 %  0.54 % mongod -f /etc/mongod.conf
 1524 be/4 mongod      0.00 B/s  566.84 K/s  0.00 %  1.40 % mongod -f /etc/mongod.conf
 1524 be/4 mongod      0.00 B/s  766.42 K/s  0.00 %  0.70 % mongod -f /etc/mongod.conf
 1524 be/4 mongod      0.00 B/s  946.21 K/s  0.00 %  0.37 % mongod -f /etc/mongod.conf


2012-02-15 09:03:29 vebasan 阅读数 929

 

##############
#
#    操作
#
##############

# iostat -x 1 10
Linux 2.6.18-92.el5xen    02/03/2009

avg-cpu: %user   %nice %system %iowait %steal   %idle
           1.10    0.00    4.82   39.54    0.07   54.46

Device:          rrqm/s   wrqm/s   r/s w/s     rsec/s   wsec/s avgrq-sz avgqu-sz await svctm %util
sda               0.00     3.50   0.40 2.50     5.60    48.00    18.48     0.00    0.97   0.97   0.28
sdb               0.00     0.00   0.00 0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00   0.00 0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00   0.00 0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00     0.10   0.30 0.20     2.40     2.40     9.60     0.00    1.60   1.60   0.08
sdf              17.40     0.50 102.00 0.20 12095.20     5.60   118.40     0.70    6.81   2.09 21.36
sdg             232.40     1.90 379.70 0.50 76451.20    19.20   201.13     4.94   13.78   2.45 93.16


##############
#
#    注释
#
##############

rrqm/s:    每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s:    每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s:       每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s:       每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s:    每秒读扇区数。即 delta(rsect)/s
wsec/s:    每秒写扇区数。即 delta(wsect)/s
rkB/s:     每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s:     每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await:     平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm:     平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:     一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)


##############
#
#    分析
#
##############

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

2.如果 idle 小于 70% IO压力就较大了,一般读取速度有较多的wait。

3.同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)

4.另外还可以参考
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。

###############
#
#   例子解释
#
###############

别人一个不错的例子.(I/O 系统 vs. 超市排队)

举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当是看排的队人数,5个人总比20人要快吧? 除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连 钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能 5 分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比排队还无聊的)。

I/O 系统也和超市排队有很多类似之处:

 

 

2012-08-16 09:56:52 jiedushi 阅读数 4385
在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,幸好LINUX 可以

动态调整请求队列数,默认的请求队列数存放在 /sys/block/hda/queue/nr_requests 文件中,

请看下面的例子:

# cat /sys/block/hda/queue/nr_requests
128

默认请求队列数为:128。现在我们来测试请求一个1G大小的文件(测试环境为虚拟机):

# time dd if=/dev/zero of=test bs=1M count=1000
 
1000+0 records in
 
1000+0 records out
 
1048576000 bytes (1.0 GB) copied, 60.2789 seconds, 17.4 MB/s
 
real    1m0.553s
 
user    0m0.043s
 
sys     0m6.363s

由此看出,共花了1分55秒,现在把 nr_requests 的 128 改成 512 再试下:

# echo 512 &gt; /sys/block/hda/queue/nr_requests
 
# cat /sys/block/hda/queue/nr_requests
 
512
 
# rm -f test
 
# time dd if=/dev/zero of=test bs=1M count=1000
 
1000+0 records in
 
1000+0 records out
 
1048576000 bytes (1.0 GB) copied, 28.298 seconds, 37.1 MB/s
 
real    0m28.787s
 
user    0m0.040s
 
sys     0m5.982s

同样大小的文件,改成 512 后只需要 28  秒钟,由此可以结论出,通过适当的调整

nr_requests 参数可以大幅提升磁盘的吞吐量,缺点就是你要牺牲一定的内存,所

以在调优的时候要对多方面对权衡考虑。

转载 http://www.nb03.com/?post=406

2016-02-18 15:04:58 aaashen 阅读数 106991

工作中有时被分配的测试机空间不大,经常遇到磁盘空间占满的情况。排查过程如下:

一、首先使用df -h 命令查看磁盘剩余空间,通过以下图看出/目录下的磁盘空间已经被占满。


二、进入根目录,因为最近常用的目录就是usr目录,所以用du -bs命令看一下常用的usr目录大小,由下图可见/usr目录占据了11g。

其实可以直接运行find命令,见第三步


三、进入usr目录用find 命令找到大文件


把日志,压缩包什么的都清空一下

就可以了


参考http://www.xitongzhijia.net/xtjc/20141203/31820.html