mooon http-stress使用教程

1. http-stress是什么?

http-stress是一个和ab(Apache Benchmark)类似的HTTP压力测试工具,是作为dispatcher和http_parser等测试用的附属应用,具备如下特性:

1) 多线程

2) 同时支持IPV4和IPV6

3) 模拟多用户并发测试

4) 可以配置多个不同或相同的URLs

5) 可以同时对同一个域名的不同IP进行测试

6) 每秒定时输出测试进度:成功和失败个数

7) 长连接和短连接测试

8) 暂只支持GET方法测试

2. 测试结果样本

[2010-10-15 21:11:29][0xf35bc6f0][STATE]time: 52 seconds

[2010-10-15 21:11:29][0xf35bc6f0][STATE]total number: 100000

[2010-10-15 21:11:29][0xf35bc6f0][STATE]failure number: 0

[2010-10-15 21:11:29][0xf35bc6f0][STATE]success number: 98040

[2010-10-15 21:11:29][0xf35bc6f0][STATE]percent number: 1923

[2010-10-15 21:11:29][0xf35bc6f0][STATE]bytes sent: 8600000

[2010-10-15 21:11:29][0xf35bc6f0][STATE]bytes received: 32894278

以上信息分别为:

耗时(暂只精确到秒,因此建议请求数不要地少)

总请求个数(每个用户的请求数 * 用户数)

成功请求个数

失败请求个数

发送出去的字节数

接收到的字节数

3. 配置文件

需要配置两个文件,分别为tress.xml和route.table,tress.xml用来配置测试参数,route.table是dispatcher模块需要的路由表。

3.1. route.table

指定消息应当发往哪,为文本文件,由两部分组成:首行必须为路由项个数,其余行的格式必须满足:路由ID\t目标IP\t目标端口,其中IP可以为IPV4或IPV6或者域名,路由ID不可以重复,其它可以重复。

另外,建议尽量避免配置域名,因为域名解析的系统调用是阻塞的,会影响测试的真实性,如果实在需要使用域名,建议在/etc/hosts中配置和IP的映射关系。

route.table文件示例,注意是以分隔:

10

1       127.0.0.1       9999

2       127.0.0.1       9999

3       127.0.0.1       9999

4       127.0.0.1       9999

5       127.0.0.1       9999

6       127.0.0.1       9999

7       127.0.0.1       9999

8       127.0.0.1       9999

9       127.0.0.1       9999

10      127.0.0.1       9999

route.table中的每一行路由项,代表一个用户,所以用户数需要通过它来配置,而不能通过tress.xml配置。

路由ID取值范围为从0到65535,可以不连续。

mk_table.sh脚本可以用来自动生成route.table,运行参数为:

并发数 目标IP  目标端口

如:sh mk_table.sh 10 127.0.0.1 9999。

3.2. tress.xml

定义各测试参数,示例如下:

:日志级别,除调试外,因为设置为state级别

:线程个数

:是否为长连接

:分别为每个用户发送的请求个数(注意不是总请求个数)、测试的域名、允许的最大出错个数(超出这个数进程将退出)。

urls:需要测试的url列表

:每行一个URL,要求以“/”打头,可以重复。http_stress即可,不带任何参数,但http_stress依赖libutil.so、libsys.so、libnet.so、libdispatcher.so和libhttp_parser.so这几个库文件,因此运行之前需要先设置好LD_LIBRARY_PATH环境变量,如:export  LD_LIBRARY_PATH=$MOOON_HOME/lib。

5. 编译步骤

在编译http-stress之前,需要依次先编译好基础类库(common-library)和公共组件(common-component)。

请使用SVN从http://mooon.googlecode.com/svn/trunk/ 上下载源代码。

5.1. 编译基础类库

基础类库(common-library)包含util、sys、net和plugin等几个库,编译步骤如下:

1) 进入基础类库的src目录

2) 运行first_once.sh脚本,如:sh first_once.sh(建议这样用,因为从SVN取下的first_once.sh没有可执行权限,如果不为它增加可执行权限,直接./first_once.sh将报错)。下面的操作遵循automake;

3) 运行configure,生成Makefile,如:./configure --prefix=/usr/local/mooon,其中--prefix后面为mooon的安装目录,必须指定

4) 编译源文件,运行make即可

5) 安装,运行make install即可。基础类库(common-library)编译成功后,就可以开始编译公共组件了。

5.2. 编译公共组件

公共组件(common-component)依赖于基础类库(common-library),在这里只需要编译dispatcher和http-parser两个公共组件,不要尝试去编译其它组件,因为可能编译通不过。公共组件编译步骤如下:

1) 进入公共组件的src目录

2) 运行first_once.sh脚本

3) 运行configure,注意指定--prefix参数为mooon安装目录

4) 进入dispatcher目录,运行make编译源文件

5) dispatcher编译成功后,运行make install安装

6) 进入http_parser目录,运行make编译源文件

7) http_parser编译成功后,运行make install安装。下面可以开始编译http-stress了。

5.3. 编译http-stress

http-stress隶属web application,编译方法相同,分别如下:

1) 进入web application的src目录

2) 运行first_once.sh脚本

3) 运行configure,注意指定--prefix参数为mooon安装目录

4) 进入http_stress目录,运行make编译源文件

5) http_stress编译成功后,运行make install安装。

假设MOOON_HOME代表mooon的安装目录,则$MOOON_HOME/lib库文件存放目录,$MOOON_HOME/bin为http_stress等可执行文件存放目录,如下所示:

mooon/

|-- bin

|   |-- http_stress

|   `-- mk_table.sh

|-- conf

|   |-- route.table

|   `-- stress.xml

|-- include

|   |-- sys

|   |-- net

|   |-- plugin

|   `-- util

|   |-- dispatcher

|   |-- http_parser

|-- lib

|   |-- libdispatcher.so

|   |-- libhttp_parser.so

|   |-- libnet.so

|   |-- libsys.so

|   |-- libutil.so

|   `-- libxtinyxml.so

`-- log

请注意,要将$MOOON_HOME/lib所在路径加入到LD_LIBRARY_PATH中,才可以运行http_stress,否则运行时会报.so找不到错误。

6. 后序

在mooon中,http-stress是作为dispatcher和http-parser的测试工具而诞生的,因而比较粗鲁简单,在易用性和测试输出的数据方面还有很大改进空间,欢迎动手对它进行改进并分享。

如需要任何帮助、或有任何建议、或发现任何问题,请发邮件给eyjian@qq.com,谢谢!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Linux下top命令详解

豌豆贴心提醒,本文阅读时间7分钟 ? top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器...

44350
来自专栏晨星先生的自留地

DNS(上) 之原理与搭建篇

19930
来自专栏云计算教程系列

如何在Ubuntu 14.04上安装和配置Naxsi

Naxsi是第三方Nginx模块,提供Web应用程序防火墙功能。它为您的Web服务器带来了额外的安全性,并保护您的服务器免受各种Web攻击,如XSS和SQL的注...

23700
来自专栏idba

一款基于go语言的agent

一 介绍 在构建数据库自动化运维系统的时候,数据库服务器上必须要有一个agent来执行web服务器端发起的命令,我们研究了好几种技术Celery,Redis ...

28900
来自专栏程序员的碎碎念

JavaScript实现登录注册验证

学习需要坚持,堕落了一星期,学也不是,玩也不对,今天终于跑到图书馆来学习。 言归正传,今天要做的就是登录注册页面的验证和与数据库连接的操作。这...

99540
来自专栏Fish

使用cuda-gdb调试cu程序

简要教程 仿佛对于.cu程序的调试是需要关闭x的,所以学习了一下如何用cuda-gdb在tty下调试.cu程序. 1. 对于.cu文件是需要编译好才能调试...

41360
来自专栏大学生计算机视觉学习DeepLearning

c++ 网络编程(八)TCP/IP LINUX-epoll/windows-IOCP下 socket opoll函数用法 优于select方法的epoll 以及windows下IOCP 解决多

原文链接:https://www.cnblogs.com/DOMLX/p/9622548.html

45040
来自专栏埋名

CentOS7安装维护nginx从入门到精通

Nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 HTTP,HTTPS 和邮件相关(SMTP,POP3,IMAP)的协议链接。并且提供了负载均衡以...

53820
来自专栏JavaEdge

Redis Cluster流程原理

Redis 3.0之后,节点之间通过去中心化的方式,提供了完整的sharding、replication(复制机制仍使用原有机制,并且具备感知主备的能力)、fa...

23420
来自专栏张善友的专栏

Enterprise Library 4 缓存快速入门

快速入门使用了一个顶层的处理程序来捕获任何场景中的任何异常。处理程序显示了一个带有异常信息的对话框。 快速入门在构建和运行应用程序之前不需要执行任何安装步骤。...

23590

扫码关注云+社区

领取腾讯云代金券