Garbage collection log is a vital artifact to study the performance characteristics of an application. It plays a key role to diagnose memory/CPU related problems. However today’s world Garbage collection logs are analyzed manually. Most often it’s analyzed only when there is a performance problem. There is no programmatic way to analyze Garbage Collection logs […]


Your Java application has been running fine, but all of a sudden CPU consumption starts to go higher and higher, until it stays at 80 – 100%. Even if you remove the server from load balancer (so that traffic isn’t sent anymore), still the CPU consumption is maxed out. The only way to recover from this […]


There are 8 flavors of java.lang.OutOfMemoryError. In these 8 flavors java.lang.OutOfMemoryError: unable to create new native thread is one of the commonly occurring flavor. This type of OutOfMemoryError is generated when an application isn’t able to create new threads. This error can surface because of following two reasons: There is no room in the memory to […]


Thread dumps are vital artifacts to diagnose CPU spikes, deadlocks, memory problems, unresponsive applications, poor response times and other system problems. There are great online thread dump analysis tools such as http://fastthread.io/ which can analyse and spot problems. But to those tools you need provide proper thread dumps as input. Thus in this article, I […]

Police Officers Giving Woman Traffic Ticket --- Image by © JDC/LWA/Corbis

BLOCKED, WAITING, and TIMED_WAITING are important thread states, but often confusing to many of us. One must have a proper understanding of both in order to analyze thread dumps. Using real-life examples, this article breaks down each state into simpler terms. Any confusing concepts can be easily understood through examples rather than formal definitions given […]


Webservice APIs response times are critical for successful business. There are several strategies to improve the response time. One of the strategies is to compress the payload size. When payload sizes are compressed network latency between you and your client can be reduced. HTTP Compression is a good technique to reduce the network latency between […]


Happy to see several of my articles to be published in popular DZone.    


In the Garbage Collection log file, 3 types of time are reported for every single GC event: ‘user’ ‘sys’ ‘real’ Example: [Times: user=11.53 sys=1.38, real=1.03 secs]. For any engineer who is analyzing the GC logs will have following two questions: What is the difference between ‘user’, ‘sys’, and ‘real’ times? Which time should I use […]


In my personnel dictionary, I have defined google as “Excellence in Engineering”. I can’t express my admiration for their products, engineering practices & innovation culture. In such admired google, I uncovered a silly bug, that too in their core search engine product. Are you surprised? Me too. I recently launched my pet project http://gceasy.io/ – as a free […]


Service virtualization is a great way to test software. We have been using this methodology for more than a decade now, when the term “Service virtualization” didn’t even exist. Back then it was called “Data Simulation”. There are two prominent products in this space: Lisa ITKO  –  commercial product from Computer Associates (CA) WireMock – Open source solution Here is my […]


Recently spoke at VMoksha Technologies in Bangalore, India on software Testing! Talk had a good reception from a motivated team. Fig: While delivering the talk Fig: Photograph with few attendees after Talk    


We make major investments in tools, people and process to effectively test applications. But how we measure the effectiveness of these investments? How do we know how well our applications are getting tested? How do you know what percentage of application is getting tested? There is a famous quote: “If you can’t measure it, you […]


A major travel application in North America confronted with this problem. When the users search for flights in the application, Javascript from the browser would be making calls to servers to get the content and render it. It typically takes around 8 – 10 seconds to do the complete search. During this time period Java script […]


A major shipping monopoly in North America ported their Mainframe batch (25+) jobs to Java platform. This porting was done by one of the top 3 consulting companies of India. Because of the world-class architecture, selection of frameworks and code written by them, Jobs took 16:04 hours to complete. Batch jobs that were started at […]


Here goes my vision for future of SOA & Modern APIs.


After contributing to open source projects development, I learnt that the superior quality of those products comes primarily because of the high quality unit tests those developers write. Applying same practice to enterprise software can also deliver superior quality products. Suppose there is a function substring which returns a new string from the original string […]


Eclipse MAT is a great JVM Memory Analysis tool. Here are few tit-bits to use it effectively. Use stand-alone version Two versions of Eclipse MAT is available: 1. Stand-alone 2. Eclipse Plugin Based on my personnel experience, stand-alone version seems to works better and faster then plugin version. So I would highly recommend installing Stand-alone […]


A good friend of mine is in the recruiting business. Some how he misjudged that I am good in Java🙂. He asked me to give a list of Java interview questions that he can use for preliminary screening, before he submits the candidate to the client🙂. I am sharing what I shared with my friend. […]


There are several blogs, articles on different GC algorithms, their inner details, their Pros, their Cons….. This article tries to summarizes Pros and Cons of each GC algorithm in one single slide.


Description Threads in ‘runnable’ state consume CPU. So when you are analyzing thread dumps for high CPU consumption, threads in ‘runnable’ state should be thoroughly reviewed. Typically in thread dumps several threads are classified in ‘RUNNABLE’ state. But in reality several of them wouldn’t be actually running, rather they would be just waiting. But still JVM classifies them in ‘RUNNABLE’ state. You […]