by Karun Subramanian
on May 24, 2015
It stinks when you don’t throw away of the Garbage
Every java application, whether it is an one line ‘hello world’ application, or an online banking application with millions of users, needs Physical memory to run. And this memory has an upper limit (sorry, you can’t have the cake and eat it too) which is defined by the parameter –Xmx in the Java command line that starts the application.
Example:
Java –Xmx128m HelloWorld
In the above command, 128M is the maximum memory the HelloWorld application can have. This memory is called Heap and it lives in the memory available in the host operating system. As your program executes, it creates Objects, which occupy memory. JVM allocates this memory using available heap.
Read More
by Karun Subramanian
on May 24, 2015
Software needs memory (RAM) to run. Unfortunately memory is limited. This simply means this: Your application must manage the memory usage effectively or it will suffer.
In a Java application, much of the memory management – scratch that – all of memory management is handled by JVM itself. This is great news for the developers as they don’t need to meddle with ‘malloc’,’free’ and the like. However, due to the fact that every application is different, the out- of-the box JVM memory management may not be efficient.
Garbage Collector is the key element in JVM memory management. In order for your application to run at its maximum speed and reliability, Garbage Collector a.k.a GC must be tuned. GC tuning can be a very time consuming process, mainly because,
1. There are plethora of GC tuning options
2. It takes rigorous testing to identify the effectiveness of the tuning
In the following segments, I will explain how Garbage collector works, the various memory related issues that you might face and how to troubleshoot them. I will also show you few handy tools you can use to speed up troubleshooting.
Coming up: Troubleshooting GC: What is GC and how it works – Part 1
by Karun Subramanian
on May 15, 2015
Garbage Collection is a life saver. Sure, you don’t have to mess with malloc() and free() and not worry about accidently deallocating objects that are still being referenced. But is GC a cure-all? Does it save you from all memory issues? Worse yet, can it cause more damage than good? Here are three reasons why GC is overrated:
Read More
by Karun Subramanian
on December 26, 2014
One of the deadliest errors you can encounter in your Java application is ‘OutOfMemory’ error. The impact this error can have in your application and your business can be enormous. I have seen organizations spend countless hours struggling to fix this error while continuing to have degraded end-user experience (a sure-fire way to lose credibility). One company was actually restarting their application every three hours just to avoid an ugly hang due to OOM. How sad?
In this article, I would like to point out the most important tuning parameter in your Java application. If you get this wrong, no matter how much tuning you put in, you will end up with an OOM sooner or later. Note that there are tons of tuning parameters available to tune the memory. Most of these may not have any effect at all, and some have game-changing effect. The parameter I’m about to reveal is of later kind and the mother of all parameters. This should be the first parameter you should be analyzing to zero-in.
Without further due, here it is.
Read More
by Karun Subramanian
on December 18, 2014
Do you know the single biggest reason why some APM solutions fail?
Do you know what you have to do first before you even begin evaluating various APM solutions?
Do you know the hidden cost in any APM system?
Selecting an APM solution can be tedious task. In this free 18 pages eBook, I present 9 criteria to choose a reliable APM with highest ROI. I’ve derived these criteria based on years of supporting Application infrastructure of various sizes. These criteria will help you clearly understand what exactly you should be looking for in any potential APM solution. You will be ready to ask the right questions when you meet with the APM vendor and will not be caught off guard later.
Enjoy the eBook and Good Luck.
by Karun Subramanian
on December 15, 2014
In this free ebook, I introduce 9 free tools that can be life savers in managing Java Applications. These tools have been time tested, reliable and have helped countless Application Support Engineers and Developers. They DO WORK. These tools can be used to solve problems ranging from ‘Out Of Memory’ errors to ‘Slow’ Applications.
Enjoy.
by Karun Subramanian
on October 30, 2014
Alright. Now let us dive into step-by-step procedure on actually analyzing the Thread Dump.
Step by Step procedure to analyze a Thread dump
1. Open the Thread dump in your favorite text editor.
Note: Java Threadump (aka javacore) is generally a text file that can be opened using any text editor. If you cannot open it, chances are it is not a JVM thread dump. Perhaps you are trying to open a heap dump or an Operating System core file.
2. Search for the string RUNNABLE. If you are running IBM JVM, look for the string “state:R”.
3. There can be lot of RUNNABLE threads. What you want to do is pay attention to the Threads that are running your application code. They will be evident from stack trace. Look for com.<companyname>.<packagename>.<classname>.<methodname>. You can ignore Application Server specific Threads. It is not unusual to see tons of Application Server threads (for example listen sockets) in the Thread dump.
Example: The Thread below is clearly NOT running your application code at that moment
because it does not show any “com.<companyname>.<packagename>.<classname>.<methodname” in its stack trace.
Read More
by Karun Subramanian
on October 26, 2014
Okay. Now that you have some fundamentals drilled in, let us look at how exactly to take the Thread Dump. But even before that, let us answer this question:
Does taking Thread dump kill the Application Server? Are there any side effects?
When you take the Thread dump, the JVM is momentarily paused to dump the stack. This does mean that the JVM is interrupted. But that’s about the effect taking the Thread dump should have on the JVM – a momentary pause. However since it is somewhat intrusive process, there is an extremely rare possibility that it does something adverse to the JVM, like getting aborted. But in practice the cases like this are virtually none.
How do you take a Thread Dump of a JEE Application Server?
Read More
by Karun Subramanian
on October 25, 2014
‘Threads’ is perhaps the most misunderstood component among Application support engineers and even among Software Developers. Take a look at the following questions that we typically come across in our glorious support career:
- What does it mean to say ‘There must be hung Threads’ in the Application?
- Have you exhausted the available Threads in Application Server?
- Which Thread Pool is used for Web Container?
- Do I have to configure the number of JDBC Connections in the connection pool equal to the number of Threads I have in the Application Server?
- How can I find out which thread is currently running in the Application Server?
- Is ‘number of Threads’ configurable? Can I have unlimited Threads?
- How can I find out all Threads that are currently running?
- Is there a Thread Dead Lock going on?
- How can I kill hung Threads?
Well, after going through this three part series, you will be able to answer all the above questions.
What is a Thread?
Read More
by Karun Subramanian
on July 27, 2014
Let’s face it. Nobody likes a slow application. It is our job to make sure our applications fulfill the functionality need completely, but at the same time delivers good user experience.
In 16 years of my experience in technical support primarily in the world of JEE, while I cannot honestly say ‘I have seen it all’, I can say “I have seen a lot“. Here are the top 10 reasons why your Java application may slow.
Read More