iozone - linux下I/O性能测试

星期四, 四月 16th, 2009

Iozone(www.iozone.org)是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能。可以测试Read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write 等等不同的模式下的硬盘的性能。测试所有这些方面,生成excel文件,另外, iozone还附带了用gnuplot画图的脚本。该软件用在大规模机群系统上测试NFS的性能,更加具有说服力。

测试参数: -i # 用来指定测试内容.

  0=write/rewrite
  1=read/re-read
  2=random-read/write
  3=Read-backwards
  4=Re-write-record
  5=stride-read
  6=fwrite/re-fwrite
  7=fread/Re-fread,
  8=random mix
  9=pwrite/Re-pwrite
  10=pread/Re-pread
  11=pwritev/Re-pwritev,
  12=preadv/Re-preadv

测试格式为-i #,比如测试写:-i 0,测试读和写:-i 0 -i 1。

-R 产生execl格式的输出日志。

-b 将产生二进制的execl的日志文件名。

-s 测试的文件大小。

-r 文件块大小。

-a 在希望的文件系统上测试,不过只有-a的话会进行全面测试,要花费很长时间,最好用-i指定测试范围。

-g 指定最大测试文件大小。

-n 指定最小测试文件大小。

-f 指定测试文件。

-C 显示每个节点的吞吐量。

-c 测试包括文件的关闭时间

用tee命令生成log信息。

./iozone -g 2G -n 512M -i 0 -i 1 -f /mnt/test -Rab /home/iozone.xls -C | tee /home/iozone.log

iozone的日志文件写入到了iozone.log内。


测试实例

  $ iozone -i 0 -i 1 -Rab ~/test-iozone.xls -g 4M -n 1M -C
通过iozone测试硬盘性能
通过iozone测试硬盘性能
---------------------------------------------------------------
iozone的确是一款不错的文件系统性能测试工具,可以就文件系统的很多方面作自动测试。地址:www.iozone.org 用法: 在希望进行测试的文件系统上运行: /opt/iozone/bin/iozone -a 即可进行全面的自动测试,不过通常需要很长的时间,要耐心等待。 /opt/iozone/bin/iozone -a -i 1 只对write, rewrite进行性能测试 /opt/iozone/bin/iozone -a -i 1 -i 0 对读写进行性能测试 /opt/iozone/bin/iozone -a -g 1G -i 0 -i 1 对读写进行性能测试,并且最大测试文件为1G /opt/iozone/bin/iozone -Ra 测试所有方面,并且生成excel文件 上面的命令在执行时,最好通过重定向保存到另外一个文件中. /opt/iozone/bin/iozone –Rab output.wks 测试小文件 /opt/iozone/bin/iozone -a -s 512m -y 1k -q 8k -b minfile_result.xls 测试普通文件 如果2G内存测试,时间太长,先在grub.conf里把内存变成256m,这时使用512m的文件测试,就不会使用缓存了。 可以保证测试的准确性 /opt/iozone/bin/iozone -a -s 512m -y 8k -q 512k -b comfile_result.xls 测试大文件 /opt/iozone/bin/iozone -a -s 512m -y 1024k -q 10240k -i 0 -i 1 -i 2 -b largefile_result.xls 测试-i命令的使用 /opt/iozone/bin/iozone -Rab output.wks -g 1G -i 0 -i 1 -i 2 -i 8 -R 创建 Excel 报告 -g 设置自动模式下最大文件大小 Set maximum file size (in Kbytes) for auto mode. -s 指定文件大小 -s 512k or -s 512M or -s 1G -f filename 指定临时文件 -F filename filename filename 指定临时文件组 -t # 线程数 -q 指定最大记录大小 -q 512K or -q 512M or -q 1g -y 指定最小记录大小 -y 512K or -q 512M or -q 1g -U mountpoint Mount point to unmount and remount between tests. Iozone will unmount and remount this mount point before beginning each test. This guarantees that the buffer cache does not contain any of the file under test. 通常情况下,测试的文件大小要求至少是系统cache的两倍以上,这样,测试的结果才是真是可信的。如果小于cache的两倍,文件的读写测试读写的将是cache的速度,测试的结果大打折扣。

网站压力测试工具 siege,webbench,ab

星期三, 四月 15th, 2009

Web进行压力测试有很多工具, 比如Microsoft的application center test (ACT), 还有Mercury 的 LoadRunner, Apache的ab(Apache benchmark), 作为开源软件的Siege 等。

LoadRunner是一个商业软件,其功能非常的强大,可以自定义HTTP的头, 访问的URL, 以及各种访问并发规则等.
apache的ab做重复压力测试不错,但是每次只能测试一个链接.
Siege(英文意思是围攻)设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。

1.siege
Siege可以从http://www.joedog.org/siege/获得, 它包含了一组压力测试工具:

Siege是一个多线程的WEB性能测试工具,被设计成可以让WEB开发人员了解代码在长时间压力下的性能.可以模拟很多用户同时访问WEB服务器,此数量可以自由定义.这就相当于web server被围攻(siege)了.

性能指标包括已用时间(elapsed time),总数据传输量(total data transferred),服务器响应时间 (response time),执行率?(transaction rate),并发数(concurrency),每次运行后会生成报告.

siege有三种运行模式:regression,internet simulation,brute force(我们最常用的是internet simulation,模拟用户对网站访问的随机性)

==== 选项如下: ====
''-C,或--config''

在屏幕上打印显示出当前的配置,配置是包括在他的配置文件$HOME/.siegerc中,可以编辑里面的参数,这样每次siege都会按照它运行.

''-v''

运行时能看到详细的运行信息

''-c n,或--concurrent=n''

模拟有n个用户在同时访问,n不要设得太大,因为越大,siege消耗本地机器的资源越多

''-i,--internet''

随机访问urls.txt中的url列表项,以此模拟真实的访问情况(随机性),当urls.txt存在是有效

''-d n,--delay=n''

hit每个url之间的延迟,在0-n之间

-r n,--reps=n

重复运行测试n次,不能与 -t同时存在

-t n,--time=n

持续运行siege'n'秒(如10S),分钟(10M),小时(10H)

-l

运行结束,将统计数据保存到日志文件中siege.log,一般位于/usr/local/var/siege.log中,也可在.siegerc中自定义

-R SIEGERC,--rc=SIEGERC

指定用特定的siege配置文件来运行,默认的为$HOME/.siegerc

-f FILE, --file=FILE

指定用特定的urls文件运行siege,默认为urls.txt,位于siege安装目录下的etc/urls.txt

-u URL,--url=URL

测试指定的一个URL,对它进行"siege",此选项会忽略有关urls文件的设定

urls.txt文件:

是很多行待测试URL的列表以换行符断开,格式为:

[protocol://]host.domain.com[:port][path/to/file]

例如:

http://www.*.net/wiki/index.php
http://www.*.net/index.html
http://www.*.net/gallery
www.*.net/blog

Example:

siege -c 100 -t30M -u http://*.net/
表示对http://*.net/这个站点使用100个用户并发访问,持续30分钟进行测试
注意:"-t30M"之间没有空格

关于作者:
siege的作者:Jeffrey Fulmer <jeff@joedog.org>
官方主页:joedog.org
==== 安装 ====
freebsd:
<code>
pkg_add -r siege
</code>
或者使用ports:
<code>
cd /usr/ports/benchmarks/siege
make
make install
</code>
gentoo:
<code>
emerge siege
</code>

==== .siegerc中几个重要的选项 ====
internet = true | false

true表示对urls.txt中的URL随机访问,以模拟实际的Internet;false表示按urls.txt中的URL列表顺序访问

logging = true|false

选择是否记录结果到日志中

logfile = /home/maxim/log/siege.log

运行结果日志的保存位置

protocol = HTTP/1.0 | HTTP/1.1

选择协议的类型

concurrent = 80

设定有多少用户并发访问
time = n(S|M|H)

持续"siege"多长时间,可以秒,分钟,小时为单位
file = /path/to/urls.txt

设定默认的urls.txt文件位置,使用此选项须确保""url = xxx""无效(注释掉即可)

url = http://xxx.xxx.xxx

只针对某个url进行测试,此选项会使urls.txt的设定无效(-f URLSFILE)

此外,siege还支持很多其他的功能,可以通过proxy测试,也可以测试需要用户身份认证的网页

使用样例:
任务列表:www.*.com.url文件
http://www.*.com/tech/
http://www.*.com/tech/acdsee.html
http://www.*.com/tech/ant.html
http://www.*.com/tech/apache_install.html
....

siege -c 20 -r 2 -f www.*.com.url
参数说明:
-c 20 并发20个用户
-r 2 重复循环2次
-f www.*.com.url 任务列表:URL列表

输出样例:

** Siege 2.59
** Preparing 20 concurrent users for battle. 这次“战斗”准备了20个并发用户
The server is now under siege.. done. 服务在“围攻”测试中:
Transactions: 40 hits 完成40次处理
Availability: 100.00 % 成功率
Elapsed time: 7.67 secs 总共用时
Data transferred: 877340 bytes 共数据传输:877340字节
Response time: 1.65 secs 相应用时1.65秒:显示网络连接的速度
Transaction rate: 5.22 trans/sec 平均每秒完成5.22次处理:表示服务器后台处理的速度
Throughput: 114385.92 bytes/sec 平均每秒传送数据:114385.92字节
Concurrency: 8.59 最高并发数 8.59
Successful transactions: 40 成功处理次数
Failed transactions: 0 失败处理次数

注意:由于速度很快,可能会达不到并发速度很高就已经完成。Response time显示的是测试机器和被测试服务器之间网络链接状况。Transaction rate则表示服务器端任务处理的完成速度。

辅助工具:
增量压力测试:
为了方便增量压力测试,siege还包含了一些辅助工具:
bombardment (1)
是一个辅助工具:用于按照增量用户压力测试:
使用样例:
bombardment urlfile.txt 5 3 4 1
初始化URL列表:urlfile.txt
初始化为:5个用户
每次增加:3个用户
运行:4次
每个客户端之间的延迟为:1秒

输出成CSV格式:
siege2csv.pl (1)
siege2csv.pl将bombardment的输出变成CSV格式:
Time Data Transferred Response Time Transaction Rate Throughput Concurrency Code 200 (note that this is horribly broken.)
242 60.22 603064 0.02 4.02 10014.35 0.08
605 59.98 1507660 0.01 10.09 25136.05 0.12
938 59.98 2337496 0.02 15.64 38971.26 0.26
1157 60 2883244 0.04 19.28 48054.07 0.78

2.webbench

获取并安装
wget http://home.tiscali.cz:8080/~cz210552/distfiles/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
如果找不到源就网上搜个吧

使用:
webbench -c 500 -t 30 http://www.taoav.com
参数说明:-c表示并发数,-t表示时间(秒)
4测试结果示例:
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://www.taoav.com
500 clients, running 30 sec.

Speed=3230 pages/min, 11614212 bytes/sec.
Requests: 1615 susceed, 0 failed.

3.ab
apache自带测试工具,在apache2的bin目录里

测试例子: ab -n 10000 -c 100 -t 10 http://www.taoav.com/index.php
参数: -n 表示请求总数, -c 表示并发数. -t 表示请求时间限制

以下为结果
Server Software: Apache/2.0.53
Server Hostname: www.taoav.com
Server Port: 80

Document Path: /index.php
Document Length: 17998 bytes

Concurrency Level: 100
Time taken for tests: 660.930623 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 181850000 bytes
HTML transferred: 179980000 bytes
Requests per second: 15.13 [#/sec] (mean)
Time per request: 6609.306 [ms] (mean)
Time per request: 66.093 [ms] (mean, across all concurrent requests)
Transfer rate: 268.69 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 15 117.6 0 1730
Processing: 436 6564 1142.2 6517 15395
Waiting: 340 4164 1512.2 3906 14973
Total: 436 6579 1143.4 6526 15395

Percentage of the requests served within a certain time (ms)
50% 6526
66% 6972
75% 7262
80% 7377
90% 7755
95% 8295
98% 8683
99% 9815
100% 15395 (longest request)