Over a million developers have joined DZone.

How to Load Test Tomcat Servers

DZone's Guide to

How to Load Test Tomcat Servers

The AJP protocol can help you load test Tomcat servers.

· Performance Zone ·
Free Resource

Built by operators for operators, the Sensu monitoring event pipeline empowers businesses to automate their monitoring workflows and gain deep visibility into their multi-cloud environments. Get started for free today.

If your testing environment consists of a Tomcat servlet container, (maybe with an Apache web server), bottlenecks may appear. A Tomcat servlet container communicates to a web server using the Apache JServ Protocol — AJP. So, to evaluate the performance of the Tomcat engine, it’s natural to communicate to it using the same AJP protocol.

By using Apache JMeter, you can simulate AJP requests with a sampler that can send these requests and gets responses — the AJP/1.3 Sampler. You can also use this JMeter sampler to load test the WildFly, Jetty, and GlassFish servlet containers, which also uses AJP. This blog post will teach you how to do it.

What Is AJP?

AJP is a binary protocol committed to routing requests from a web server to application servers. AJP is more optimized than HTTP for the web server to application server communications because it is a more compact binary protocol. For example, a method of a request (“POST” or “GET”) is encoded as only one byte and each header as just two bytes. So, it’s significantly less information to send, and, therefore, each request is processed much faster.

Requests are processed roughly in the following way:

  • The client sends an HTTP request to a web server.
  • The web server, configured to use the mode_jk connector, translates the HTTP request to an AJP request and sends it to one or more application servers.

Here is a basic diagram of connections between the Client, front-end Apache Web Server, and Tomcat Application Servers:

Increase imageajp protocol load testing

For architectures like this, the JMeter AJP/1.3 Sampler enables testing each AJP connection in your system by sending AJP requests to any application server and finding bottlenecks.

There are three versions of an AJP — 1.2 (deprecated), 1.3 and 1.4 (experimental). JMeter’s AJP/1.3 Sampler supports the 1.3 version.

Now, let’s learn how to use it.

The AJP Sampler

Increase imageload testing tomcat with jmeter

The AJP/1.3 Sampler translates the HTTP request set in this component to an AJP request. As you can see, it has a similar GUI to the HTTP Sampler.

  • Server Name or IP: specify the server name or the IP of a server with your servlet container instance.
  • Port: the default port for AJP is 8009.
  • Method: an HTTP method to be used with your request.
  • Path: a URL to your resource.
  • Parameters: here you can specify parameters for your request.

There is only one limitation for the AJP Sampler — the current implementation doesn’t support uploading multiple files in one request. Only the first file will be uploaded. You can use multiple AJP Samplers to upload multiple files.

Setting Your Tomcat Demo Environment

Now, let’s see how the AJP Sampler works in a JMeter script. First, we’ll launch a Tomcat instance on our local machine and configure it to send POST Requests. A Tomcat9 distribution comes with some servlet examples, that can be used to check AJP requests.

Our testing scenario is:

  • We will use the “Request Parameter” example, provided by Tomcat, that simulates sending parameters with a POST request.
  • We will send a POST request with some parameters and then receive a response that shows the values for these parameters.

1. To launch a Tomcat instance on your server, you have to have a Java Runtime Environment installed and configured (JRE_HOME environment variable set). You also need to set the CATALINA_HOME environment variable to a root folder of downloaded Tomcat and add a %CATALINA_HOME%\bin value to the list of PATH environment variables.

2. After all the preparations are done, execute a “catalina run” command in the command line. Your Tomcat web-interface can now be accessed by localhost:8080 URL.

Increase imagejmeter ajp protocol testing

3. You can check the example apps through the “Examples” link under “Developer Quick Start:”

Increase imageload testing open source ajp sampler jmeter

4. Let’s test the servlet example “Request Parameters:"

how to use jmeter's ajp sampler

5. In this example, we can execute a POST request to set “firstname” and “lastname” fields.

Increase imagejmeter, ajp testing

6. Let’s manually enter some values and see the response.

Increase imagejmeter ajp sampler tutorial guide

7. Press the ‘Submit’ button.

Increase imageajp tutorial for load testing

The entered values are assigned to the “firstname” and “lastname” fields.

Now, we will try to reproduce this request by using the AJP Sampler.

Creating a JMeter Script With the AJP Sampler

In the previous section, we saw that this servlet accepts two parameters and then returns them in the response. Now let’s use the AJP Sampler to send the AJP POST request with some parameters to our server via JMeter and check that we get the same parameters in the response.

1. Open JMeter and add a Thread Group to your Test Plan.

Right Click->Add->Threads (Users)->Thread Group

Increase imageajp protocol jmeter testing tutorial

2. Add an AJP Sampler to your Thread Group.

Right Click->Add->Sampler->AJP/1.3 Sampler

Increase imagehow to use the jmeter ajp sampler

3. Configure the AJP Sampler exactly as you would configure an HTTP Sampler.

  • Set the Server Name to “localhost”, because our Tomcat instance is running on our local machine.
  • Set the Port to “8009” (default AJP port)
  • Set the Method to “POST” to set parameters on the server with our request.
  • Set the Path to “/examples/servlets/servlet/RequestParamExample” - that is the path to our “Request Parameter” example servlet, as you can see it in your browser’s address bar.
  • Specify parameters to send with the request (could be any):
    • firstname: testFirstName
    • lastname: testLastName

Our finished sampler will look like this:

Increase imagejmeter guide for testing ajp

4. Add a View Results Tree Listener.

Right Click->Add->Listener->View Results Tree

Increase imagejmeter script for ajp testing

5. Now, we can execute our script and see the results in the listener.

Increase imageperformance testing ajp with jmeter

Here, we can see our sampler successfully sent the AJP request to our server with the specified parameters. We see that our parameters are listed under “Parameters in this request” section — this means our server successfully got our request.

Congratulations! You now know how to load test AJP and Tomcat servers. To run your test in an even easier manner, upload your script to BlazeMeter and run it smoothly in the cloud. You will get scalability, collaboration options, and advanced reporting.

Start testing now! Click here or put your URL in the box below and your test will start in minutes.

Image title

Download our guide to mitigating alert fatigue, with real-world tips on automating remediation and triage from an IT veteran.

performance ,tomcat ,server ,tomcat server ,ajp ,apache ,apache tomcat ,tutorial ,load test

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}