Splunk Completes Acquisition of Plumbr Learn more

Slow HTTP Operations

Web Service calls over HTTP are one of the most frequent ways to implement integrations between subsystems. The sheer amount of such operations combined with the blocking and remote nature of the calls is a significant threat to performance.
Extract information about bottlenecks from HTTP headers by attaching Plumbr.

How Plumbr will help you

The example above is extracted from a slow HTTP call captured by Plumbr. As seen from the above, the call to http://demeter.internal/api took 51 seconds to complete in the self-service@poseidon.public JVM. During this time the end user was forced to wait, rendering the transaction completion time intolerably slow.

It is also visible that this is not an isolated incident. The very same webservice has been too slow to respond in 3,096 times during the past 24 hours.

Besides capturing the endpoint of the communication, Plumbr also exposes the call stack through which such a call was made:

org.apache.http.impl.client.CloseableHttpClient.execute():50
org.apache.http.impl.client.CloseableHttpClient.execute():55
...
com.mycompany.invoice.consumer.InvoiceConsumer.sendRequest():74
com.mycompany.invoice.consumer.InvoceImpl.getInvoiceDetails():406
...
java.util.concurrent.ThreadPoolExecutor$Worker.run():617
java.lang.Thread.run():745

In addition, Plumbr exposes you the full view of the transaction where this particular HTTP Call participated in. Opening the transaction #100980545 link in the root cause header exposes you the following information:

From the above it is clear that the particular call added 51 seconds to the 1 minute 03 seconds the entire transaction took to complete.


The Solution

The particular issue at hand was resolved by optimizing the remote system to respond to such queries faster. In general, the solution for slow HTTP calls tends to involve one or more of the following techniques:

  • Optimizing the network round-trip
  • Optimizing the remote system response times
  • Decoupling the remote call to an asynchronous method invocation
  • Caching the information fetched from the remote system locally
  • Batching multiple calls to the remote system to one large batch