duboo性能测试 经验总结(一)linux命令 CPU I/O 网络 内存

本篇主要记录性能测试中需要使用到的各种命令,以及对各种情况的性能进行分析:

使用uptime获取CPU 1/5/15分钟前到现在的负载平均值

显示:

	14:49:05 up 2 days, 23:44,  1 user,  load average: 0.12, 0.25, 0.24

结果说明:

	14:49:05  :当前时间 
	2 days, 23:44  : 系统已运行时间 
	1 user    : 当前在线用户数 
	load average  : 0.12, 0.25, 0.24最近1分钟 5分钟 15分钟系统负载

常用命令:

  1. 1分钟;
    uptime | awk '{print $9}' | cut -f 1 -d ','
    
  2. 5分钟;
    uptime | awk '{print $10}' | cut -f 1 -d ','
    
  3. 15分钟;
    uptime | awk '{print $11}' | cut -f 1 -d ','
    

使用IOSTAT 查看磁盘繁忙情况

默认显示:

Linux 2.6.32-642.el6.x86_64 (XXXX03)  11/01/2018      _x86_64_        (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.03    0.00    0.02    0.00    0.00   99.94

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.51         4.18         3.85    1095012    1009472
sdb               0.13         4.03         2.11    1055130     552400
dm-0              0.00         0.01         0.00       2504          0
dm-1              0.00         0.01         0.00       2504          0
dm-2              0.09         0.98         0.14     256538      35992
dm-3              0.40         4.02         2.11    1054450     552400
dm-4              0.08         0.62         0.02     161658       4840
dm-5              0.17         0.40         0.98     104626     257248
dm-6              0.08         0.19         0.42      49778     109160
dm-7              0.36         0.62         2.29     163570     599288
dm-8              0.05         1.25         0.01     328170       2864

结果说明:
第一部分包含了CPU报告

#user : 显示了在执行用户(应用)层时的CPU利用率

#nice : 显示了在以nice优先级运行用户层的CPU利用率

#system : 显示了在执行系统(内核)层时的CPU利用率

#iowait : 显示了CPU在I/O请求挂起时空闲时间的百分比

#steal : 显示了当hypervisor正服务于另外一个虚拟处理器时无意识地等待虚拟CPU所占有	       的时间百分比。

#idle : 显示了CPU在I/O没有挂起请求时空闲时间的百分比

第二部分包含了设备利用率报告

#Device : 列出的/dev 目录下的设备/分区名称

#sda  sdb: 个人理解->windows 硬盘卷,每增加一块物理硬盘/插入U盘 就会多一行该项

#dm-0  : 个人理解->windows 逻辑券 ,类似C盘 D盘 E盘等逻辑分区
	
#tps : 显示每秒传输给设备的数量。更高的tps意味着处理器更忙。

#Blk_read/s : 显示了每秒从设备上读取的块的数量(KB,MB)

#Blk_wrtn/s : 显示了每秒写入设备上块的数量(KB,MB)

#Blk_read : 显示所有已读取的块

#Blk_wrtn : 显示所有已写入的块

#tps : 每秒事务数

IOSTAT 常用参数 k m x d

	iostat -mx
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.22     0.11    0.13    0.38     0.00     0.00    15.73     0.00    0.91    0.87    0.92   0.56   0.03
sdb               0.09     0.18    0.04    0.09     0.00     0.00    46.39     0.00    0.93    1.90    0.43   0.66   0.01
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00    1.06    1.06    0.00   0.57   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00    1.43    1.43    0.00   0.93   0.00
dm-2              0.00     0.00    0.07    0.02     0.00     0.00    12.16     0.00    3.15    2.06    7.84   0.39   0.00
dm-3              0.00     0.00    0.13    0.26     0.00     0.00    15.33     0.00    1.08    2.44    0.41   0.22   0.01
dm-4              0.00     0.00    0.08    0.00     0.00     0.00     8.00     0.00    0.38    0.36    0.80   0.06   0.00
dm-5              0.00     0.00    0.04    0.12     0.00     0.00     8.33     0.00    0.82    0.55    0.92   0.34   0.01
dm-6              0.00     0.00    0.02    0.05     0.00     0.00     8.04     0.00    1.28    0.73    1.53   0.18   0.00
dm-7              0.00     0.00    0.08    0.29     0.00     0.00     8.00     0.00    0.78    0.20    0.93   0.39   0.01
dm-8              0.00     0.00    0.05    0.00     0.00     0.00    23.30     0.00    1.62    1.63    1.45   0.62   0.00

输出信息的含义

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%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

使用sar命令 查看磁盘情况

1. 查看磁盘

	sar -d
05:20:01 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
05:30:01 PM    dev8-0      1.18     12.26     10.19     19.04      0.00      1.23      1.03      0.12
05:30:01 PM   dev8-16      0.20      0.00      2.43     12.44      0.00      1.00      0.50      0.01
05:30:01 PM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:30:01 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:30:01 PM  dev253-2      0.03      1.52      0.13     52.21      0.00      2.21      2.21      0.01
05:30:01 PM  dev253-3      0.30      0.00      2.43      8.00      0.00      0.75      0.32      0.01
05:30:01 PM  dev253-4      0.17      0.00      1.35      8.00      0.00      0.70      0.52      0.01
05:30:01 PM  dev253-5      0.25      0.00      1.96      8.00      0.00      0.35      0.25      0.01
05:30:01 PM  dev253-6      0.05      0.00      0.41      8.00      0.00      0.06      0.03      0.00
05:30:01 PM  dev253-7      0.52      0.00      4.14      8.00      0.00      0.79      0.51      0.03
05:30:01 PM  dev253-8      0.59     10.74      2.20     21.92      0.00      2.97      1.24      0.07
Average:       dev8-0      0.47      1.57      4.38     12.61      0.00      0.95      0.77      0.04
Average:      dev8-16      0.46     13.30      8.20     46.87      0.00      0.79      0.59      0.03
Average:     dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-2      0.01      0.07      0.08     12.97      0.00      0.83      0.64      0.00
Average:     dev253-3      1.15     13.30      8.20     18.66      0.00      0.56      0.24      0.03
Average:     dev253-4      0.01      0.00      0.06      8.00      0.00      0.73      0.42      0.00
Average:     dev253-5      0.14      0.00      1.12      8.00      0.00      0.91      0.38      0.01
Average:     dev253-6      0.05      0.00      0.42      8.00      0.00      1.50      0.24      0.00
Average:     dev253-7      0.33      0.00      2.66      8.00      0.00      0.93      0.71      0.02
Average:     dev253-8      0.03      1.50      0.04     49.77      0.00      2.09      1.63      0.01

说明:

#tps:每秒I/O的传输总数

#rd_sec/s 每秒读取的扇区的总数

#wr_sec/s 每秒写入的扇区的 总数

#avgrq-sz 平均每次次磁盘I/O操作的数据大小(扇区)

#avgqu-sz 磁盘请求队列的平均长度

#await 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间

#svctm I/O的服务处理时间,即不包括请求队列中的时间

#%util I/O请求占用的CPU百分比,值越高,说明I/O越慢

2.获取对应磁盘所对应的逻辑盘

	ll /dev/mapper
crw-rw---- 1 root root 10, 58 Oct 29 15:05 control
lrwxrwxrwx 1 root root      7 Oct 29 15:05 VG00-lvapp -> ../dm-8
lrwxrwxrwx 1 root root      7 Oct 29 15:05 VG00-lvhome -> ../dm-4
lrwxrwxrwx 1 root root      7 Oct 29 15:05 VG00-lvroot -> ../dm-2
lrwxrwxrwx 1 root root      7 Oct 29 15:05 VG00-lvswap1 -> ../dm-0
lrwxrwxrwx 1 root root      7 Oct 29 15:05 VG00-lvswap2 -> ../dm-1
lrwxrwxrwx 1 root root      7 Oct 29 15:05 VG00-lvtmp -> ../dm-7
lrwxrwxrwx 1 root root      7 Oct 29 15:05 VG00-lvvar -> ../dm-5
lrwxrwxrwx 1 root root      7 Oct 29 15:05 VG00-lvvarlog -> ../dm-6
lrwxrwxrwx 1 root root      7 Oct 29 15:05 VGDATA-lvmdata -> ../dm-3

可以看到/data目录挂载在dm-3上

3.查看挂载软链

	ll /dev/dm-*

可以查看所有盘都挂载硬盘 253上

brw-rw---- 1 root disk 253, 0 Oct 29 15:05 /dev/dm-0
brw-rw---- 1 root disk 253, 1 Oct 29 15:05 /dev/dm-1
brw-rw---- 1 root disk 253, 2 Oct 29 15:05 /dev/dm-2
brw-rw---- 1 root disk 253, 3 Oct 29 15:05 /dev/dm-3
brw-rw---- 1 root disk 253, 4 Oct 29 15:05 /dev/dm-4
brw-rw---- 1 root disk 253, 5 Oct 29 15:05 /dev/dm-5
brw-rw---- 1 root disk 253, 6 Oct 29 15:05 /dev/dm-6
brw-rw---- 1 root disk 253, 7 Oct 29 15:05 /dev/dm-7
brw-rw---- 1 root disk 253, 8 Oct 29 15:05 /dev/dm-8

4.直接查看虚拟盘的性能

	sar -d -p
05:20:01 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
05:30:01 PM       sda      1.18     12.26     10.19     19.04      0.00      1.23      1.03      0.12
05:30:01 PM       sdb      0.20      0.00      2.43     12.44      0.00      1.00      0.50      0.01
05:30:01 PM VG00-lvswap1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:30:01 PM VG00-lvswap2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:30:01 PM VG00-lvroot      0.03      1.52      0.13     52.21      0.00      2.21      2.21      0.01
05:30:01 PM VGDATA-lvmdata      0.30      0.00      2.43      8.00      0.00      0.75      0.32      0.01
05:30:01 PM VG00-lvhome      0.17      0.00      1.35      8.00      0.00      0.70      0.52      0.01
05:30:01 PM VG00-lvvar      0.25      0.00      1.96      8.00      0.00      0.35      0.25      0.01
05:30:01 PM VG00-lvvarlog      0.05      0.00      0.41      8.00      0.00      0.06      0.03      0.00
05:30:01 PM VG00-lvtmp      0.52      0.00      4.14      8.00      0.00      0.79      0.51      0.03
05:30:01 PM VG00-lvapp      0.59     10.74      2.20     21.92      0.00      2.97      1.24      0.07
05:40:01 PM       sda      0.54      0.00      5.56     10.30      0.00      0.83      0.61      0.03
05:40:01 PM       sdb      0.17      0.00      1.85     11.12      0.00      1.27      0.66      0.01
05:40:01 PM VG00-lvswap1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:40:01 PM VG00-lvswap2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:40:01 PM VG00-lvroot      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:40:01 PM VGDATA-lvmdata      0.23      0.00      1.85      8.00      0.00      1.12      0.47      0.01
05:40:01 PM VG00-lvhome      0.04      0.00      0.32      8.00      0.00      0.50      0.50      0.00
05:40:01 PM VG00-lvvar      0.13      0.00      1.07      8.00      0.00      0.65      0.39      0.01
05:40:01 PM VG00-lvvarlog      0.05      0.00      0.36      8.00      0.00      3.04      0.33      0.00
05:40:01 PM VG00-lvtmp      0.48      0.00      3.82      8.00      0.00      0.99      0.51      0.02
05:40:01 PM VG00-lvapp      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:          sda      0.47      1.55      4.39     12.58      0.00      0.95      0.77      0.04
Average:          sdb      0.46     13.17      8.14     46.75      0.00      0.80      0.59      0.03
Average:    VG00-lvswap1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:    VG00-lvswap2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:    VG00-lvroot      0.01      0.07      0.08     12.97      0.00      0.83      0.64      0.00
Average:    VGDATA-lvmdata      1.14     13.17      8.14     18.64      0.00      0.56      0.24      0.03
Average:    VG00-lvhome      0.01      0.00      0.06      8.00      0.00      0.72      0.42      0.00
Average:    VG00-lvvar      0.14      0.00      1.12      8.00      0.00      0.91      0.38      0.01
Average:    VG00-lvvarlog      0.05      0.00      0.42      8.00      0.00      1.51      0.24      0.00
Average:    VG00-lvtmp      0.33      0.00      2.67      8.00      0.00      0.94      0.71      0.02
Average:    VG00-lvapp      0.03      1.48      0.04     49.77      0.00      2.09      1.63      0.00

util1
svctm2

使用mysql自带工具mysqlslap进行数据库操作压测

磁盘读写能力的另外一个验证方法,是使用mysql的自带工具mysqlslap进行测试

常用测试命令:

./mysqlslap --concurrency=10 --engine=innodb --iterations=3 --auto-generate-sql --auto-generate-sql-load-type=write --number-int-cols=10 --number-char-cols=30 --auto-generate-sql-add-autoincrement --number-of-queries=10000 -u???? -p
???? -h127.0.0.1 -P????

–number-of-queries 测试总计运行次数(该次数会被所有线程运行平摊)
–iterations= 测试次数 该值建议3以上 ,最终显示最高值 最低值 与平均值
–number-int-cols=10 模拟表拥有的int类型的列的数量
–number-char-cols 模拟表拥有char类型的列的数量
–engine=innodb 索引类型
–concurrency 并发数 线程数

获取mysql写线程数的方法,但是实际使用其他测试工具时,并发数一定要大,因为mysql自己会对数据进行整合后再进行写入,特别是高tps下,所以实际上使用mysqlslap测试时 需要使用更多的线程建议 20以上 进行测试

mysql> show variables like 'innodb_write_io_threads'
    -> ;
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_write_io_threads | 4     |
+-------------------------+-------+

单线程顺序写 测试命令 DD

rm -rf /data/a.dat && dd bs=4096 count=256000 oflag=direct if=/dev/zero of=/data/a.dat && rm -rf /data/a.dat

bs 数据块大小 单位B 4096=4k写入 一般为该值 1个页

多线程随机读写 测试工具sysbench

./sysbench --test=fileio --file-num=300 --file-block-size=4096 --file-total-size=300M prepare

./sysbench --test=fileio --file-num=300 --file-block-size=4096 --file-total-size=3000M --num-threads=4 --file-test-mode=rndwr --file-extra-flags=direct run

./sysbench --test=fileio --file-num=300 --file-block-size=4096 --file-total-size=3000M --num-threads=50 --file-test-mode=rndwr --file-extra-flags=direct run

./sysbench --test=fileio --file-num=300 --file-block-size=4096 --file-total-size=300M cleanup

–file-num 文件数 一般测试时为写入的文件数 ,如果测试服务的I/O时,主要为日志 ELK等性能损耗 所以该值建议为1
如果测试的是数据库,那么该值建议为表的数量
–file-total-size 文件总容量,如果设置为300文件 该值为文件倍数 例如设计每文件10M 那么该值为3000
–num-threads 测试时的并发数 测试线程数
–file-test-mode rndwr 为随机写 另外还有随机读写 随机读 顺序读 顺序写 顺序读写
{seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)}
–file-extra-flags=direct 测试磁盘的话 一定加上该参数,否则会被操作系统在内存整合后再一并写入。

#使用uptraf查看本机网络吞吐量

iptraf -d eht0

#netperf 测试clinet/server下的端到端吞吐量

# netserver
Starting netserver at port 12865
Starting netserver at hostname 0.0.0.0 port 12865 and family AF_UNSPEC
# netperf -H 172.16.38.36 -l 10
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 172.16.38.36 (172.16.38.36) port 0 AF_INET
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec 
 
 87380  16384  16384    10.32      93.68

一般磁盘经验总结

本地机械盘

磁盘种类顺序4K写4线程随机写write50线程随机写10000次插入mysql插入耗时
本地机械盘25-28 MB/sIOPS=5000-7000 MiB/s (20.64 MB/s)IOPS=7313.73 28.57 MiB/s (29.96 MB/s)3-4s
共享存储 3PARdataFibre6 MB/s-12MB/sIOPS=520.86 - 1000 MiB/s (2.13 - 4MB/s) -IOPS=5737.29 22.41 MiB/s (23.50 MB/s)4-7s

目前一般服务器CPU / 内存 硬件过剩,更多的是网络状况 与 磁盘性能带来的性能瓶颈,在所有磁盘调整为本地盘,共享存储的不是那么繁忙的情况下,提升硬盘的速度 ->数据库的操作速度会带来更好的响应时间。

共享存储:虚机过多或同时使用,那么会存在资源竞争情况,对磁盘I/O测试带来很大干扰。可以由下面方法确认:

  1. 同时测试
  2. CPU iowait 参数 看io等待时间
  3. await svctm 比例 如果 svctm 接近 await 那么基本无等待 ,如果存在await 远大于 svctm 会存在I/O等待

200并发下 插入 /更新 的mybatis 在10-15ms内,duboo 200线程 轮询等待自身有大约5ms的损耗(总业务线上duboo大致损耗为10%),故相比数据库的操作,服务一般优化的幅度较少,如何提高硬件的I/O利用率是提高TPS的最快方法。


  1. util%到达100% 并不代表使用率真的到达百分百,拥有并行能力的磁盘会远大于这个值。5个磁盘 其中1个满负载该值就为100%,实际上另外4个磁盘可能空闲。 ↩︎

  2. svctm它并不代表真正的存储service time,因为它是计算出来的。需要统计该值需要使用压测工具。应该参考avgqu-sz:超过处理能力的请求数目,待处理的 I/O 请求,当请求持续超出磁盘处理能力,该值将增加。 网上标准说持续超过2就应该警示,具体值大家在工作中自己摸索,具体指什么,如一块机械盘,串行IO(每次1个IO),那么avgqu-sz持续大于2既代表持续有两倍读写能力的IO请求在等待。 那么当RAIDs 或者 SSD等并行,这里假定并行度为5.63,那么 avgqu-sz持续大于10,才代表持续有两倍读写能力的IO请求在等待。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值