curl-loader(也被称为“omes-NIK”和“davilka”)是一个开源的C语言编写的工具,模拟应用负载和成千上万的几十万人的HTTP / HTTPS和FTP/ FTPS的客户端应用程序的行为,每个有其自己的源IP地址。相反,其他curl-loader使用真正的C编写的客户端协议栈,即libcurl和TLS/ openssl的SSL的HTTP和FTP协议栈,支持登录和验证口味和模拟用户行为的工具。
所以,体积虽小,但不要小看他的能力哦!^_^ curl-loader 性能测试工具在初做测试时就有听过,但由于它的运行环境是linux系统,所以,一直没下载使用,现在刚好可以趁着学linux的机会把玩一下。
------------------------------------------------------------------------------------------------
- 运行环境:centOS 4.8 -
- 下载地址: http://sourceforge.net/projects/curl-loader/files/curl-loader/ -
- 官方配置文档: http://curl-loader.sourceforge.net/index.html -
------------------------------------------------------------------------------------------------
安装步骤:
[root@youname test]# tar jxvf curl-loader-0.56.rar.bz2 解压文件
解压之后
[root@youname test]# cd curl-loader-0.56 进入目录
[root@youname curl-loader-0.56 ]# vi QUICK-START 打开快还入门文档
其中有如下提示:

.............
Build it using general C development environment with bash,
gcc (3 or 4 series), make, etc on a linux machine.
Building pre-requirements are:
1. openssl binaries;
2. openssl development package with include files (on debian package libssl-dev)
............

如果有你的linux系统有gcc和openssl环境的话,下面内容可以跳过,没有的话跟我来安装。
--------------------安装gcc----------------------------------------------------------------------------
首先,要求我们运行必须有gcc 环境:
方法一
如果你的是redhat/centos版本的linux,可以运行下面命令进行下载安装
[root@youname test]# yum install gcc gcc-c++ 下载安装C编译器
方法二
rpm安装如果安装系统盘有,可以将安装光盘插入,运行下面命令(虚拟机请参考插入安装文件的方式):
[root@youname test]# rpm -ivh gcc*
----------------------------安装 openssl------------------------------------------------------------------------------------
其次,要求我们运行需要安装openssl 包
[root@youname curl-loader-0.56]# rpm -qa | grep ssl 查看自己是否安装了openssl服务。
方法一
下载相应的服务并安装(方法繁琐,这里给链接)
下载:http://download.chinaunix.net/download/0001000/11.shtml
安装方式 :http://myswirl.blog.163.com/blog/static/513186422007101410149578/
方法二
上面方式比较麻烦,最简单的方式就DVD/CD方式将系统盘插入,然后在系统盘/centOS/RPMS/目录中找到:
openssl-0.9.7a-43.17.el4_7.2.rpm
openssl-devel-0.9.7a-43.17.el4_7.2.rpm
两rpm包,双点击安装重启就OK了。
当然,也可以参照安装gcc的方法二通过命令安装
[root@youname test]# rpm -ivh [文件名]
-------------------------------------------------------------------------------------------------------------------------------------------------
前提环境满足后,下面一个命令就开始安装了。
[root@youname test]# make 自动编译
编译完成后curl-loader可执行程序,curl-loader 为我们提供了一些例了,我们先看一下例子中如何配置性能选项
[root@youname curl-loader-0.56]# cd conf-examples/ 打例子目录
[root@youname conf-examples]# cp 10K.conf mysimp.conf 将10K.conf文件拷贝到当前目录下并命名为mysimp.conf
[root@youname conf-examples]# vi mysimp.conf 打开编辑mysimp.conf文件

########### GENERAL SECTION ################################
BATCH_NAME= 10K //测试对象的名称
CLIENTS_NUM_MAX=10000 //最大虚拟用户数
CLIENTS_NUM_START=100 //一开始启动用户数
CLIENTS_RAMPUP_INC=50 //每秒钟启动几个用户
INTERFACE =eth0 //使用的网卡eth0
NETMASK=16 //子网掩码位数
IP_ADDR_MIN= 192.168.1.1 //起始IP地址
IP_ADDR_MAX= 192.168.53.255 #Actually - this is for self-control //最后的IP地址范围
CYCLES_NUM= -1 // -1 表示无限循环
URLS_NUM= 1
########### URL SECTION ####################################
URL=http://localhost/index.html //要测试的URL
#URL=http://localhost/ACE-INSTALL.html
URL_SHORT_NAME="local-index"
REQUEST_TYPE=GET
TIMER_URL_COMPLETION = 5000 # In msec. When positive, Now it is enforced by cancelling url fetch on timeout
TIMER_AFTER_URL_SLEEP =20

对上面的内容配置完成后保存退出
进行性能测试
执行下面一条命令就开始运行我们的性能测试了
[root@youname curl-loader-0.56]# curl-loader -f ./conf-examples/mysimp.conf

运行测试的过程中,上面的信息会不断的更新(刷新)中。环境终于跑通了。后面会详细学一下curl-loader的具体使用
这一节具体分析一下curl-loader的使用,以及各项参数的含义。
简单的性能测试与要求环境:
--------------------------------------------------------------------------------------------------------------------------------------------
访问百度首页:http://www.baidu.com/index.html
虚拟用户数:20
初始启动用户:1
每秒钟启动:1 (20秒后20位用户全部启动)
网络环境:本地linux -----外网百度首页 带宽:45KB/s (不稳定)
性能工具:curl-loader
----------------------------------------------------------------------------------------------------------------------------------------------
性能文件配置:
可以在curl-loader-0.56/conf-examples/ 目录下任意找一个配置文件,拷贝重名为:baidu.conf
[root@youname conf-examples]# vi baidu.conf 打开配置文件进行修改

########### GENERAL SECTION ################################
BATCH_NAME= baidu //测试对象的名称
CLIENTS_NUM_MAX=20 //最大虚拟用户数
CLIENTS_NUM_START=1 //一开始启动用户数
CLIENTS_RAMPUP_INC=1 //每秒钟启动几个用户
INTERFACE =eth0 //使用的网卡eth0
NETMASK=16 //子网掩码位数
IP_ADDR_MIN= 192.168.1.1 //起始IP地址
IP_ADDR_MAX= 192.168.53.255 #Actually - this is for self-control //最后的IP地址范围
CYCLES_NUM= -1 // -1 表示无限循环
URLS_NUM= 1
########### URL SECTION ####################################
URL=http://www.baidu.com/index.html //要测试的URL
#URL=http://localhost/ACE-INSTALL.html
URL_SHORT_NAME="local-index"
REQUEST_TYPE=GET
TIMER_URL_COMPLETION = 5000 # In msec. When positive, Now it is enforced by cancelling url fetch on timeout
TIMER_AFTER_URL_SLEEP =20

关于各项参数的含义,上面代码中已经加了注释。修改完成后,保存退出!
=======================================================================================
运行性能测试:
执行下面命令运行配置文件,开始进行测试。
[root@youname curl-loader-0.56]# curl-loader -f ./conf-examples/baidu.conf 启动运行刚才配置的文件

============ loading batch is: mysimp ======================================
--------------------------------------------------------------------------------
Interval stats (latest:3 sec, clients:20, CAPS-curr:23):
H/F Req:70,1xx:0,2xx:77,3xx:0,4xx:0,5xx:0,Err:0,T-Err:3,D:273ms,D-2xx:273ms,Ti:196498B/s,To:4344B/s
H/F/S Req:0,1xx:0,2xx:0,3xx:0,4xx:0,5xx:0,Err:0,T-Err:0,D:0ms,D-2xx:0ms,Ti:0B/s,To:0B/s
--------------------------------------------------------------------------------
Summary stats (runs:114 secs, CAPS-average:24):
H/F Req:2731,1xx:0,2xx:2713,3xx:0,4xx:0,5xx:0,Err:15,T-Err:46,D:280ms,D-2xx:280ms,Ti:187514B/s,To:4385B/s
H/F/S Req:0,1xx:0,2xx:0,3xx:0,4xx:0,5xx:0,Err:0,T-Err:0,D:0ms,D-2xx:0ms,Ti:0B/s,To:0B/s
=================================================================================
Manual: clients:max[20],curr[20]. Inc num: [+|*].
===================================================================

注:上面信息一直在刷新中。按键盘ctrl+C 键终止测试
各项参数说明:
interval stats 间隔统计
latest 最新数据(3秒内的)
clients 并发用户数量
CAPS-curr 最新发送请求数
req: request (请求)
- 1xx成功NUM; - 2xx成功NUM;- 3xx的重定向数量;- 4xx客户端错误数;- 5xx服务器错误数;
平均2XX(成功)的HTTP响应中的应用服务器延时,如上,但只有2xx有应答。来推动是3xx的重定向和5xx服务器错误/拒绝未必能真实反映一个测试服务器工作的功能(D2XX);
Ti (T-in) 吞吐量“吞”,平均值,字节/每秒
To (T-out) 吞吐量“吐”,平均值,字节/每秒
Summary stats 总结统计
runs 运行时间
CAPS-average 总平均发送请求数(秒)
错误类型:
err - 其他NUM错误,如解析,TCP连接,服务器关闭或空响应;
T-err - URL完成时间到期的错误;
======================================================================================
测试结果信息
k上面提到按键盘ctrl+C 键将终止测试,curl-loader会给出如下提示:

======= SIGINT Received ============.
H/F Req:97,1xx:0,2xx:97,3xx:0,4xx:0,5xx:0,Err:0,T-Err:0,D:211ms,D-2xx:211ms,Ti:257228B/s,To:5852B/s
H/F/S Req:0,1xx:0,2xx:0,3xx:0,4xx:0,5xx:0,Err:0,T-Err:0,D:0ms,D-2xx:0ms,Ti:0B/s,To:0B/s
=======================================================================================
End of the test for batch: mysimp
=======================================================================================
Test total duration was 117 seconds and CAPS average 23:
H/F Req:2828,1xx:0,2xx:2810,3xx:0,4xx:0,5xx:0,Err:15,T-Err:46,D:277ms,D-2xx:277ms,Ti:189301B/s,To:4423B/s
H/F/S Req:0,1xx:0,2xx:0,3xx:0,4xx:0,5xx:0,Err:0,T-Err:0,D:0ms,D-2xx:0ms,Ti:0B/s,To:0B/s
Exited. For details look in the files:
- baidu.log for errors and traces;
- baidu.txt for loading statistics;
- baidu.ctx for virtual client based statistics.
- baidu.ops for operational statistics.
Add -v and -u options to the command line for verbose output to mysimp.log file.
You have new mail in /var/spool/mail/root

k测试总时间为117秒和CAPS平均23
.........................................................