支持ipv6的web压力测试工具curl-load

由于工作需要,最近在测试ipv6网络设备,发现支持ipv6测试工具还有点少,于是各种折腾。

备注:对于ipv6组网及ipv6网站架设这里就不累赘了,大家可以网上搜索,现已知的IIS6.0及以上支持IPv6,apache 2.0(Linux版)以上支持,nginx支持。windows 2003的DNS不支持ipv6,2008中的dns支持ipv6。

1、前置条件

(1)本地环境要求

本地环境

[[email protected] curl-loader-0.56]# cat /etc/redhat-release

CentOS release 6.2 (Final)

[[email protected] curl-loader-0.56]#

(2)要求安装SSL相关包,gcc、make等工具

在CentOS下安装直接使用yum工具来安装即可,保证你的机器可以上外网

yum install gcc make openssl

官方说明查看地址:

http://curl-loader.sourceforge.net/doc/fast.html

Build it using general C development environment with bash, gcc compiler (3 or 4 series), make, etc on a linux machine.

Building pre-requirements are:

a. openssl binaries;

b. openssl development package with include files (on debian package libssl-dev);

curl-loader介绍

curl-loader(也被称为“omes-NIK”和“davilka”)是一个开源的C语言编写的工具,模拟应用负载和成千上万的几十万人的HTTP / HTTPS和FTP/ FTPS的客户端应用程序的行为,每个有其自己的源IP地址。相反,其他curl-loader使用真正的C编写的客户端协议栈,即libcurl和TLS/ openssl的SSL的HTTP和FTP协议栈,支持登录和验证口味和模拟用户行为的工具。

(3)ipv6地址配置

此处以我测试的系统为例

[[email protected] curl-loader-0.56]# cat /etc/sysconfig/network-scripts/ifcfg-Auto_eth2

HWADDR=00:0C:29:09:F6:42

TYPE=Ethernet

BOOTPROTO=none

IPADDR=192.168.202.101

PREFIX=24

GATEWAY=192.168.202.1

DNS1=202.102.192.68#如果你有ipv6的DNS,可以将ipv6的DNS也加上,这样后面可以使用域名进行压力测试

DEFROUTE=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=yes #修改为yes

IPVADDR=fc00:0:0:202::101 #添加ipv6地址,注意IPVADDR不是IPV6ADDR,有点怪异

IPV6_DEFAULTGW=fc00:0:0:202::1#添加默认IPv6网关

NAME="Auto eth2"

UUID=4d4bee9e-f139-4ab0-95e0-57fc7c11cc37

ONBOOT=yes

IPV6_AUTOCONF=no#关闭IPv6自动配置

IPV6ADDR=fc00:0:0:202::101/64#再次设置ipv6地址

IPV6_DEFROUTE=yes#开启ipv6默认路由

IPV6_FAILURE_FATAL=no

GATEWAY=fc00:0:0:202::1#再次设置IPv6网关

[[email protected] curl-loader-0.56]# ifconfig

eth2      Link encap:Ethernet  HWaddr 00:0C:29:09:F6:42

inet addr:192.168.202.101  Bcast:192.168.202.255  Mask:255.255.255.0

inet6 addr: fc00:0:0:202::101/64 Scope:Global

inet6 addr: fe80::20c:29ff:fe09:f642/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:5652 errors:0 dropped:0 overruns:0 frame:0

TX packets:5263 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:604459 (590.2 KiB)  TX bytes:1015130 (991.3 KiB)

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:16436  Metric:1

RX packets:76 errors:0 dropped:0 overruns:0 frame:0

TX packets:76 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:5280 (5.1 KiB)  TX bytes:5280 (5.1 KiB)

[[email protected] curl-loader-0.56]#

2、下载地址

官方下载地址:http://sourceforge.net/projects/curl-loader/files/curl-loader/

[[email protected] mysoft]# wget http://ncu.dl.sourceforge.net/project/curl-loader/curl-loader-stable/curl-loader-0.56/curl-loader-0.56.tar.bz2

[[email protected] mysoft]# tar jvxf curl-loader-0.56.tar.bz2

3、安装

(1)注意,如要是curl-load支持ipv6必须在安装即make之前修改Makefile文件中的如下内容

修改Makefile

将--disable-ipv6改为--enable-ipv6

[[email protected] curl-loader-0.56]# vi Makefile

# To enable IPv6 change --disable-ipv6 to --enable-ipv6

$(LIBCURL):

cd ./packages; tar jxfv curl-$(CURL_VER).tar.bz2; ln -sf curl-$(CURL_VER) curl; \

patch -d curl -p1 < ../patches/curl-trace-info-error.patch

mkdir -p $(CURL_BUILD);

cd $(CURL_BUILD); ../../packages/curl/configure --prefix=$(CURL_BUILD) \

--without-libidn \

--without-libssh2 \

--disable-ldap \

# To enable IPv6 change --disable-ipv6 to --enable-ipv6#这里提示如果要使curl-load支持ipv6需要开启--enable-ipv6

$(LIBCURL):

cd ./packages; tar jxfv curl-$(CURL_VER).tar.bz2; ln -sf curl-$(CURL_VER) curl; \

patch -d curl -p1 < ../patches/curl-trace-info-error.patch

mkdir -p $(CURL_BUILD);

cd $(CURL_BUILD); ../../packages/curl/configure --prefix=$(CURL_BUILD) \

--without-libidn \

--without-libssh2 \

--disable-ldap \

--enable-ipv6 \#这里默认是--disable-ipv6,需要修改为--enable-ipv6

--enable-thread \

--with-random=/dev/urandom \

--with-ssl=/usr/include/openssl \

--enable-shared=no \

--enable-ares=$(CARES_MAKE_DIR) \

如果不理解,可以看官方文档,即查看解压后文档中的README,并搜索到ipv6:(E文还是要好好学的)

[[email protected] curl-loader-0.56]# vi README

NETMASK - netmask for the loading clients IP-addresses (from IP_ADDR_MIN to

IP_ADDR_MAX). For IPv4 you can use either quad-dotted netmask string or CIDR

number from 0-32. For IPv6 only CIDR values from 0 to 128 are supported.

To enable IPv6 change --disable-ipv6 to --enable-ipv6 in Makefile

(2)make and make install

[[email protected] curl-loader-0.56]# make

[[email protected] curl-loader-0.56]# make install

mkdir -p /usr/bin

mkdir -p /usr/share/man/man1

mkdir -p /usr/share/man/man5

mkdir -p /usr/share/doc/curl-loader/

cp -f curl-loader /usr/bin

cp -f doc/curl-loader.1 /usr/share/man/man1/

cp -f doc/curl-loader-config.5 /usr/share/man/man5/

cp -f doc/* /usr/share/doc/curl-loader/

cp -rf conf-examples /usr/share/doc/curl-loader/

4、使用curl-load进行测试

由于curl-load没用进行configure步骤,即没有指定安装目录,默认就是当前解压目录,比如我这里的/home/mysoft/curl-load-0.56

(1)配置文件存放路径

[[email protected] conf-examples]# pwd

/home/mysoft/curl-loader-0.56/conf-examples

[[email protected] conf-examples]# ls

10K.conf                          https.conf

60K.conf                          ipv6.conf

bax.conf                          log-hdr-body.conf

bax-login-logoff-noncycling.conf  login-uas-cycling.conf

bax-logs.conf                     login-uas-logoff-cycling.conf

big-load.conf                     multipart-formdata-post.conf

bulk.conf                         post-form-tokens-fr-file.conf

bulk-dual-url.conf                post-xml.conf

credentials.cred                  put.conf

custom-hdrs.conf                  random_file_records.conf

delete.conf                       rate-limit.conf

fetch-probability.conf            resp-errors.conf

fetch-probability-once.conf       some.xml

ftp.conf                          timers-random-range.conf

ftp-http.conf                     url-randomize.conf

ftp-upload.conf                   url-template-file.txt

get-forms.conf                    url-template-fr-file.conf

get-post-login.conf               url-template-resp-dynamic.conf

get-post-login-cycling.conf

[[email protected] conf-examples]#

(2)修改ipv6配置文件

本次主要是使用curl-load进行ipv6 web服务器的测试工作,于是修改ipv6.conf文件

[[email protected] conf-examples]# vi ipv6.conf

########### GENERAL SECTION ################################

BATCH_NAME= ipv6

CLIENTS_NUM_MAX = 20 #10000

INTERFACE   =eth2 #需要修改为你进行ipv6通信的接口,不知道了,用ifconfig查看

NETMASK=64

IP_ADDR_MIN=  fc00:0:0:202::111 #2001:db8:fff5:6::101,IP_ADDR_MIN &MAX是用来指定ipv6地址范围的,必须和物理接口的ipv6地址在一个网段,同时没有被其他主机使用

IP_ADDR_MAX= fc00:0:0:202::130 #2001:db8:fff5:6::103 #2001:db8:fff5:ffff::1

IP_SHARED_NUM=20 #上面写了地址范围,但是不是每个地址都会用上的,这里就是指明使用上面ipv6地址范围中多少个地址用来进行测试,curl-load会在本地网卡上绑定一批ipv6的地址

CYCLES_NUM= -1

URLS_NUM     = 1

########### URL SECTION ####################################

URL= http://[fc00:0:0:216::11]/hunlian.htm #http://ip6-localhost/apache2-default/index.html 填写要测试的URL,当然URL也可以是一个文件中的多个url,注意ipv6webURL的写法,如果你使用了域名,可以直接用域名进行测试

REQUEST_TYPE=GET

TIMER_URL_COMPLETION = 0  # In msec. When positive, Now it is enforced by cancelling url fetch on timeout

TIMER_AFTER_URL_SLEEP =300 #默认为1000

(3)进行简单测试

[[email protected] curl-loader-0.56]# ./curl-loader -f conf-examples/ipv6.conf

会先绑定一下ipv6地址到eth2上

这下err的错误少了,有了2XX即成功的请求了

============  loading batch is: ipv6       ======================================

--------------------------------------------------------------------------------

Interval stats (latest:3 sec, clients:20, CAPS-curr:159):

H/F   Req:480,1xx:0,2xx:480,3xx:0,4xx:0,5xx:0,Err:0,T-Err:0,D:2ms,D-2xx:2ms,Ti:134400B/s,To:21120B/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:24 secs, CAPS-average:172):

H/F   Req:3778,1xx:0,2xx:3778,3xx:0,4xx:0,5xx:0,Err:353,T-Err:0,D:1ms,D-2xx:1ms,Ti:132230B/s,To:20779B/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来结束测试

此时再开窗口,可以看到接口上绑定了很多ipv6的地址

[[email protected] ~]# ifconfig

eth2      Link encap:Ethernet  HWaddr 00:0C:29:09:F6:42

inet addr:192.168.202.101  Bcast:192.168.202.255  Mask:255.255.255.0

inet6 addr: fc00:0:0:202::123/64 Scope:Global

inet6 addr: fc00:0:0:202::101/64 Scope:Global

inet6 addr: fc00:0:0:202::122/64 Scope:Global

inet6 addr: fc00:0:0:202::111/64 Scope:Global

inet6 addr: fc00:0:0:202::121/64 Scope:Global

inet6 addr: fc00:0:0:202::112/64 Scope:Global

inet6 addr: fe80::20c:29ff:fe09:f642/64 Scope:Link

inet6 addr: fc00:0:0:202::120/64 Scope:Global

inet6 addr: fc00:0:0:202::113/64 Scope:Global

inet6 addr: fc00:0:0:202::114/64 Scope:Global

inet6 addr: fc00:0:0:202::115/64 Scope:Global

inet6 addr: fc00:0:0:202::116/64 Scope:Global

inet6 addr: fc00:0:0:202::124/64 Scope:Global

inet6 addr: fc00:0:0:202::117/64 Scope:Global

inet6 addr: fc00:0:0:202::118/64 Scope:Global

inet6 addr: fc00:0:0:202::119/64 Scope:Global

inet6 addr: fc00:0:0:202::11a/64 Scope:Global

inet6 addr: fc00:0:0:202::11b/64 Scope:Global

inet6 addr: fc00:0:0:202::11c/64 Scope:Global

inet6 addr: fc00:0:0:202::11d/64 Scope:Global

inet6 addr: fc00:0:0:202::11e/64 Scope:Global

inet6 addr: fc00:0:0:202::11f/64 Scope:Global

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:6110 errors:0 dropped:0 overruns:0 frame:0

TX packets:6005 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:854295 (834.2 KiB)  TX bytes:1124859 (1.0 MiB)

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:16436  Metric:1

RX packets:76 errors:0 dropped:0 overruns:0 frame:0

TX packets:76 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:5280 (5.1 KiB)  TX bytes:5280 (5.1 KiB)

如何去掉这些绑定的ipv6呢?

这些地址是临时加上去的,可以重启网卡service network restart来实现。

5、一些参数说明

(1)配置参数

########### 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

(2)结果参数

各项参数说明:

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完成时间到期的错误;

两个参考blog

https://tt-topia.rhcloud.com/?cat=6

http://www.cnblogs.com/fnng/archive/2012/02/29/2373954.html

6、弯路及错误解决方法

如果不修改Makefile

即不将将--disable-ipv6改为--enable-ipv6就进行make && make install

可以看到全是Err的错误,看不到2XX

============  loading batch is: ipv6       ======================================

--------------------------------------------------------------------------------

Interval stats (latest:3 sec, clients:10, CAPS-curr:440):

H/F   Req:0,1xx:0,2xx:0,3xx:0,4xx:0,5xx:0,Err:1330,T-Err:0,D:0ms,D-2xx:0ms,Ti:0B/s,To:0B/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:9 secs, CAPS-average:458):

H/F   Req:0,1xx:0,2xx:0,3xx:0,4xx:0,5xx:0,Err:4130,T-Err:0,D:0ms,D-2xx:0ms,Ti:0B/s,To:0B/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[10],curr[10]. Inc num: [+|*].

=================================================================================

在测试的时候回出现如下错误

[[email protected] curl-loader-0.56]# tail -n 10 ipv6.log

12031 545 0 1 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

12031 545 0 2 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

12031 545 0 3 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

12031 545 0 4 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

12031 545 0 5 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

12031 545 0 6 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

12031 545 0 7 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

12031 545 0 8 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

12031 545 0 9 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

12031 545 0 10 !! ERR Couldn‘t resolve host ‘fc00:0:0:216::11‘

时间: 2024-07-30 00:10:20

支持ipv6的web压力测试工具curl-load的相关文章

十个免费的Web压力测试工具

两天,jnj在本站发布了<如何在低速率网络中测试 Web 应用>,那是测试网络不好的情况.而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量,以及你的网站的性能.我相信,北京奥组委的订票网站的开发团队并不知道有这样的测试工具. Grinder –  Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提供了便利. 支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行

python的web压力测试工具-pylot安装使用

http://blog.csdn.net/chenggong2dm/article/details/10106517 pylot是python编写的一款web压力测试工具.使用比较简单.而且测试结果相对稳定. 这里不得不鄙视一下apache 的ab测试,那结果真是让人蛋疼,同样的url,测试结果飘忽不定,看得人心惊肉跳,摸不着头脑.   下载 pylot官网:www.pylot.org/ 下载地址: http://www.pylot.org/download.html 最新的版本为pylot_1

&#8203;Web压力测试工具使用教程

Web压力测试工具:http_load.webbench.ab.Siege使用教程 前言:常在网络飘,哪有不挨刀?做网站的站长说不准哪天得罪了XX人,二话不说直接操着DDOS就上来搞你了,黑不了你,哥就D死你,遇到这样的无赖,还真没办法,因此经常性的给自己的网站做做压力测试,看看服务器的承载能力是很有必要的一件事. 一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单

推荐一个linux下的web压力测试工具神器webbench

推荐一个linux下的web压力测试工具神器webbench2014-04-30 09:35:29   来源:   评论:0 点击:880 用多了apache的ab工具之后你就会发现ab存在很多问题, 那么怎么办呢, 今天推荐一个神器---webbench webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好, 用多了apache的ab工具之后你就会发现ab存在很多问题, 那么怎么办呢, 今天推荐一个神器---webbench    

Web压力测试工具 http_load

简介 http_load是基于linux.unix平台的一种性能测工具 它以并行复用的方式运行,用以测试web服务器的吞吐量与负载,测试web页面的性能 但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死 还可以测试HTTPS类的网站请求 总结特点以及缺点 特点: 基于命令行,简单.易于上手 小巧轻便,解压缩后既然还不到100kb 这款工具是开源,免费的 缺点: 仅适用于web页面的性能测试,不适用于访问数据库 测试结果分析有限 平台依赖Linux(没有Window

linux下web压力测试工具siege的使用

linux下得web压力测试工具,最常用的应该就是apache的ab了,当然可供选择的有很多.webbench,http_load.看你个人爱好了.不过,最近,用的最顺手的是siege. siege官网地址http://www.joedog.org/ ,最新版本3.0.8,下载地址http://download.joedog.org/siege/ 1.安装 wget http://download.joedog.org/siege/siege-3.0.8.tar.gz tar xzvf sieg

Web压力测试工具 webbench

在运维工作中,压力测试是一项很重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验.但是,在压力测试中存在一个共性,那就是压力测试的结果与实际负载结果不会完全相同,就算压力测试工作做的再好,也不能保证100%和线上性能指标相同.面对这些问题,我们只能尽量去想方设法去模拟.所以,压力测试非常有必要,有了这些数据,我们就能对自己做维护的平台做到心中有数 1.简介 webbench是知名的网站压力测试工具,它是由Lionbridge公司(

WEB压力测试工具Pylot试用

Pylot介绍 转载自[http://www.freehao123.com/pylot-web/] 为了能够准确地评估网站服务器对网络流量的承受能力,我们一般会采取模拟网站用户访问,通过不断地增加并发数,延长访问时长,从而最终得出网站Web服务器的性能和负载能力.当然也可以通过Web压力测试,来完善和改进网站代码设计. 在网站服务器压力Web性能测试中有提到常用的三个Web服务压力测试工具:Apache Bench,Webbench,http_load,这也是大家使用得比较多的负载测试软件,只不

十个免费的 Web 压力测试工具

本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的.这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能. 0. Grinder –  Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提供了便利. 支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行管理.根据项目网站的说法,Grinder的 主要目标用户是“理解他们所测代码的人——Grinder不仅仅是带有一组相关响应时间的‘黑盒’测试.由于测试过程