美文网首页
如何对Tomcat服务进行压力测试

如何对Tomcat服务进行压力测试

作者: Itluobo | 来源:发表于2019-01-06 08:05 被阅读0次
AJP协议可以帮助你对Tomcat服务进行压力测试

英文原文

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请求,并发送给一个或者多个应用服务器。


    AJP

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

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

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

AJP采样器

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请求,然后接收一个返回这些参数值的请求。
  1. 要启动Tomcat实例,你需要安装并配置Java运行时(JRE_HOME环境变量需要设置)。你还需要把CATALINA_HOME设置为你下载的Tomcat的根目录,然后将%CATALINA_HOME%/bin添加到你的PATH环境变量里。

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

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

    Apache Tomcat Examples
  4. 我们试试“Request Parameters:”这个例子。


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


    Request Parameters Exxample
  6. 我们来手动输入一些值来看看相应结果。


    Example
  7. Submit

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

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

通过AJP 采样器生成JMeter脚本

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

  1. 打开JMeter,然后添加一个线程组(Thread Group)到你的测试计划(Test Plan)里。
    右击-->Add-->Threads(Users)-->Thread Group
    Test Plan
  2. 添加一个AJP 采样器到你的线程组(Thread Group)里。
    右击->Add->Sampler->AJP/1.3 Sampler
    AJP 采样器
  3. 像配置一个HTTP 采样器一样配置这个AJP 采样器
  • 把Server Name参数的值设置为"localhost",因为Tomcat实例运行在本机上。
  • Port设置成“8009”(默认的AJP端口)。
  • Method设置成“POST”。
  • Path的值设置成“/examples/servlets/servlet/RequestParamExample”,这是访问“Request Parameter”实例的路径,你可以在浏览器的地址栏里找到。
  • 设置请求参数(可以是任意值):
    • firstname:testFirstName
    • lastname:testLastName

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


AJP 采样器
  1. 添加一个查看结果树监听器(View Results Tree Listener)。
    右键->Add->Listener->View Results Tree
    结果树j监听器

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


结果

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

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

相关文章

网友评论

      本文标题:如何对Tomcat服务进行压力测试

      本文链接:https://www.haomeiwen.com/subject/oybjrqtx.html