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 email@example.com 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 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