1

I'm running a test from JMeter sending HTTPS requests to a load balancer that is then distributing the user load across multiple application servers. We have an instance where as the load grows we are seeing Non HTTP response code: org.apache.http.conn.HttpHostConnectException errors reported in JMeter. In this instance we are not seeing the requests making it to any of the application servers.

In order to isolate where the problem lies (Load Balancer or Load Generator) I was attempting to utilize Wireshark to validate request transmission, but it's unable to provide me with the information due to being HTTPS.

The issue is observed both in a single load generator configuration and JMeter Server configuration with 1 master and 2 load generators. All 3 are using JMeter 5.1.1 and are being hosted on a Windows Server VM.

3 Answers 3

0

Try to debug the issue with the below points

  • When you are getting Non HTTP response code: org.apache.http.conn.HttpHostConnectException error, whether the application can be accessed manually multiple times successfully.
  • Whether your server has enough free resources available in Server side to process the requests.
  • Whether your Load Generators are running out of memory. This may occur when requests are piled up in LG side.

Non HTTP response code: org.apache.http.conn.HttpHostConnectException

Error could occur in any of the below situations

  1. The connection may be refused by the server.

    Check the maximum number of allowed concurrent users in the server and increase it as needed.

  2. A firewall may be blocking the requests.

    Firewall may block the request since all the request are originating from same IP.

0
  1. As per HttpHostConnectException documentation

    A ConnectException that specifies the HttpHost that was being connected to.

  2. In its turn ConnectException documentation states that:

    Signals that an error occurred while attempting to connect a socket to a remote address and port. Typically, the connection was refused remotely (e.g., no process is listening on the remote address/port).

The error you're getting means that JMeter is not capable of establishing connection with the application you're testing. The reasons could be in:

  • Your application is overloaded. Check out its logs and in addition ensure that it has enough headroom to operate in terms of CPU, RAM, Disk, Network, etc. You can use JMeter PerfMon Plugin for this
  • Your application server or load balancer configuration doesn't match the load pattern. For example Apache web server by default allows 256 connections and if you will create 257 threads (virtual users) the last guy will get this ConnectException because Apache will not allow it.

  • You might be delivering more load that you think, when it comes to JMeter Distributed Testing load generators execute the same Test Plan so if you defined 1000 users in Thread Group and have 2 load generators - it means that you're producing 2000 virtual users

And last by not the least, it is possible to capture secure traffic with Wireshark, check out SSL/TLS Decryption - uncovering secrets article for configuration details.

0

To verify missing requests are sent from JMeter server, you can follow these steps:

Verify the configuration of the load balancer and the application servers to make sure they are configured correctly.

Use the Apache JMeter logging feature to see if the requests are sent from the JMeter server. You can configure the log level in the log4j2.xml file located in the /bin folder of your JMeter installation.

Use a network sniffer like tcpdump or Wireshark to monitor the network traffic and see if the requests are actually being sent from the JMeter server to the load balancer. You can also use tools like tcpdump or Wireshark to capture the packets on the load balancer and application server to verify the requests are received by the load balancer and being sent to the application servers.

You can also use Apache JMeter PerfMon Plugin to monitor the resource usage of the JMeter server and the application servers to see if there are any resource constraints causing the issue.

Here are a few reference links for more information:

One way to verify missing requests sent from a JMeter server is to use a tool such as tcpdump.

Here's an example of how you can use tcpdump to capture network traffic and check if your requests are being sent:

  1. Install tcpdump on the machine running the JMeter server:
  • For Windows, you can use WinDump (https://windump.gitlab.io/), a port of tcpdump for Windows.
  • For Linux, you can install tcpdump using the package manager (e.g. apt-get install tcpdump on Ubuntu).
  1. Start tcpdump and capture network traffic:

sudo tcpdump -s 0 -i -w <capture_file>.pcap 'port <port_number>'

  • Replace with the name of the network interface you want to capture traffic from (e.g. eth0).
  • Replace <port_number> with the port number used by your application (e.g. 443 for HTTPS).
  • Replace <capture_file> with the name of the file where you want to save the capture.
  1. Run your JMeter test and wait for it to finish.

  2. Stop tcpdump by pressing Ctrl+C.

  3. Use a tool such as Wireshark (https://www.wireshark.org/) to inspect the captured traffic and check if your requests are present in the capture file.

Note: tcpdump captures all network traffic, so it's a good idea to limit the capture to only the traffic related to your application using a filter (e.g. port <port_number> in the example above). This will make it easier to find the requests you're interested in when inspecting the capture file.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.