tomcat做web服务器性能测试,如何对Tomcat服务进行压力测试

AJP协议可以帮助你对Tomcat服务进行压力测试

d4e3bc0d2783

JMeter

如果你在测试一个由Tomcat servlet容器(或者Apache web服务器)组成的环境时,你很可能会碰到瓶颈,因为Tomcat servlet容器使用Apache JServ Protocol - AJP。所以,如果想要评估Tomcat引擎的性能的话,最合适的方式就是使用相同的AJP协议。

使用Apache JMeter,你可以通过采样器(sampler)模拟发送AJP请求并返回结果 -- 也就是AJP/1.3采样器。你也可以用这个JMeter采样器来压测WildFly,Jetty和GlassFish servlet等Web容器,它们都是用AJP协议。这篇文章将会讲解如何来进行测试。

什么是AJP?

AJP是一个致力于从web服务器路由请求到应用服务器的二进制通信协议。在web服务器和应用服务器之间通信,AJP协议比HTTP协议更加高效,因为它是使用了压缩的二进制协议。例如,对于一个请求方法(“POST”或者“GET”),AJP只需要一个字节来表示,并且每个请求头只需要两个字节。所以,需要发送的信息大大减少,也就是得每个请求的处理也更快。

请求的处理大致如下:

客户端发送HTTP请求到web服务器。

Web服务器配置了mode_jk连接器,它会将HTTP请求转换成AJP请求,并发送给一个或者多个应用服务器。

d4e3bc0d2783

AJP

对于这样的应用架构,JMeter AJP/1.3 采样器可以通过在你的系统上建立AJP连接,然后发送AJP请求到应用服务器,从而进行压测达到查找应用瓶颈的目的。

目前有3个版本的AJP协议 -- 1.2(废弃的),1.3 和 1.4(实验版本)。JMeter的AJP/1.3采样器支持1.3版本的AJP协议。

现在,我们来演示如何使用它。

AJP采样器

d4e3bc0d2783

JMeter

AJP/1.3 采样器可以将这里设置的HTTP请求转换成AJP请求。正如你所看到的,它的界面和HTTP采样器的十分相似。

Server Name or IP: 指定你的servlet应用实例的IP或者服务器名。

Port: AJP协议的默认端口是8009。

Method: HTTP协议里的方法。

Path: 指向资源的URL。

Parameter: 这里你可以指定请求的参数。

AJP 采样器有一个限制 -- 当前版本的实现不支持在一个请求里上传多个文件。只有第一个文件会被上传。必须使用多个AJP 采样器来上传多个文件。

设置你的Tomcat实例环境

现在,让我们来看看AJP 采样器在JMeter脚本里是如何工作的。首先,我们先在本地机器上启动一个Tomcat实例,然后配置它来发送POST请求。Tomcat 9默认就带了一些servlet示例,可以用来测试AJP请求。

我们的测试场景是:

我们会使用“Request Parameter”这个Tomcat提供的实例,来模拟通过POST请求发送参数。

我们会发送一个带参数的POST请求,然后接收一个返回这些参数值的请求。

要启动Tomcat实例,你需要安装并配置Java运行时(JRE_HOME环境变量需要设置)。你还需要把CATALINA_HOME设置为你下载的Tomcat的根目录,然后将%CATALINA_HOME%/bin添加到你的PATH环境变量里。

上面的设置完成后,在命令行里执行catalina_run命令。你的Tomcat web界面就可以通过localhost:8080来进行访问了。

d4e3bc0d2783

Tomcat

你可以通过点击Developer Quick Start:下面的Examples链接来查看示例应用。

d4e3bc0d2783

Apache Tomcat Examples

我们试试“Request Parameters:”这个例子。

d4e3bc0d2783

Servlet Examples with Code

在这个示例里,我们可以执行一个带“fisrtname”和“lastname”两个参数的POST请求。

d4e3bc0d2783

Request Parameters Exxample

我们来手动输入一些值来看看相应结果。

d4e3bc0d2783

Example

按Submit。

d4e3bc0d2783

Submit

输入的值会被设置到“firstname”和“lastname”两个属性上。

接下来,我们会使用AJP 采样器来产生同样的请求。

通过AJP 采样器生成JMeter脚本

在前面的章节里,我们的servlet可以接受两个参数并在结果里返回它们的值。现在,我们使用AJP 采样器来发送带参数的AJP POST请求,通过JMeter执行,并在相应结果里拿到我们在请求里设置的参数。

打开JMeter,然后添加一个线程组(Thread Group)到你的测试计划(Test Plan)里。

右击-->Add-->Threads(Users)-->Thread Group

d4e3bc0d2783

Test Plan

添加一个AJP 采样器到你的线程组(Thread Group)里。

右击->Add->Sampler->AJP/1.3 Sampler

d4e3bc0d2783

AJP 采样器

像配置一个HTTP 采样器一样配置这个AJP 采样器

把Server Name参数的值设置为"localhost",因为Tomcat实例运行在本机上。

Port设置成“8009”(默认的AJP端口)。

Method设置成“POST”。

Path的值设置成“/examples/servlets/servlet/RequestParamExample”,这是访问“Request Parameter”实例的路径,你可以在浏览器的地址栏里找到。

设置请求参数(可以是任意值):

firstname:testFirstName

lastname:testLastName

设置完成后的采样器如下:

d4e3bc0d2783

AJP 采样器

添加一个查看结果树监听器(View Results Tree Listener)。

右键->Add->Listener->View Results Tree

d4e3bc0d2783

结果树j监听器

6.现在,我们可以运行结果,并在监听器里查看结果。

d4e3bc0d2783

结果

现在,可以看到我们的采样器已经顺利地把带有我们设定的参数的AJP请求发送到我们的服务器上。并且,可以看到之前设置的参数都列在“Paramater in this request”部分 -- 这意味着我们的服务已经收到我们的请求了。

恭喜!你现在知道怎么压测AJP协议以及Tomcat服务了。为了更加方便地去执行你的测试,你可以将脚本上传到BlazeMeter上,然后直接在云上运行。你能够很方便的进行扩展,协同合作,并且可以得到高级的报表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值