系统性能瓶颈,都是磁盘惹的祸,一文搞定磁盘性能测试!
系统tps低,磁盘使用率高,CPU使用率又正常,那么就可以看看磁盘的的速度!
LInux操作系统可以使用dd和hdparm进行测试磁盘的速度,其中hdparm主要用于ssd磁盘测试。
磁盘测试速度之前,先介绍两个熟悉的设备:/dev/null:回收站、无底洞。 /dev/zero: 伪设备,它只产生空字符流,对它不会产生IO。测试磁盘写能力
dd if=/dev/zero of=/path/to/file count=2048k conv=fsync
参数解释:
if : input file
of: output file
这个命令的意思就是从一个文件写入另一文件,返回耗时和速度。[root@sweng3 ]# dd if=/dev/zero of=/var/log/ss count=2048k conv=fsync 2097152+0 records in 2097152+0 records out 1073741824 bytes (1.1 GB) copied, 9.30563 s, 115 MB/s
因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
conv=fsync 加入这个参数后,dd命令执行到最后会真正执行一次"同步(sync)"操作,这样算出来的时间才是比较符合实际使用结果的。(如果没有这个参数,只是写缓存,速度快很多。)
bs=512Bytes, 这是默认值,表示每次写入多大的块。
count=2048k, 写入多少次,这个例子中bs*count = 1GB,也就是写入1GB的数据来测试。conv=fdatasync 表示只把文件的"数据"写入磁盘,fsync 与fdatasync相差不大
oflag=dsync 每个block size都单独写一次磁盘,使用同步I/O,去除caching的影响,这是最慢的一种方式,可以当成是模拟数据库插入操作。
oflag=direct,nonblock 避掉文件系统cache,直接读写,不使用buffer cache
oflag=direct,测到的才是真实的磁盘IO速度
测试磁盘读能力
dd if=/dev/sda of=/dev/null bs=4k
/dev/sda是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sda上,也相当于测试磁盘的读能力。用大文件来测试读速度
time dd if=/dev/zero of=/var/log/ss count=4096k conv=fdatasync
dd if=/var/log/ss of=/dev/null bs=32k
测试同时读写能力
time dd if=/dev/sda of=/var/log/dd bs=2048k
在这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sda是读,对/testrw.db 是写),假设它们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。hdparm测试磁盘
hdparm仅用于Linux系统。现在主要用来测试SSD固态硬盘读取速度。yum安装
yum install hdparm
源码包编译安装# wget http://ncu.dl.sourceforge.net/project/hdparm/hdparm/hdparm-9.48.tar.gz # tar zxvf hdparm-9.48.tar.gz # cd hdparm-9.48 # make && make install
测试硬盘的读取效率
hdparm -t /dev/sda
测试硬盘缓存的读取速度
hdparm -T /dev/sda
hdparm -Tt /dev/sda
2秒钟读取了17210 MB的缓存,读取速度约合8645 MB/sec;
在3.01秒中读取了1318MB磁盘数据(物理读),读取速度约合439 MB/sec 测试硬盘的实际读性能
hdparm -tT --direct /dev/sda
还可以使用sar、nmon等监控查看磁盘的速度等!
#头条创作挑战赛##linux#