In programming, keeping it simple is often the best approach. A developer should take a similar approach when troubleshooting and monitoring applications. VisualVm is a great example of a basic tool that has all you need for most troubleshooting situations. It is an all in one approach that does not over complicate its agenda as a tool. In this blog post we describe what VisualVm is, what developers use it for, and why it’s simple all in one approach is all you need.
What is VisualVM?
Put simply, VisualVm is a graphical user interface that allows you to see detailed and important information about your java application while running on the Java Virtaul Machine (JVM). Because it runs on the JVM layer, it can be used with all JVM languages. As a bonus, it’s free and comes as part of the JDK. It works by bundling some of the command line tools within the JVM, software such as JConsole, jstat, jstack, jinfo, and jmap, to retrieve and report data from the JVM.
What can I use it for?
It can be used in many monitoring or troubleshooting aspects of your application. The features especially relevant to this post are outlined below:
Memory leaks are detected using the lightweight profiler within VisualVm. Because these are generally hard to find, the best way to look for a memory leak is to use the memory profiler while your application is running. This will continuously track memory allocation in your application giving you results based on real world usage. Using the profiler you can compare and track what’s taking up the most amount of memory as your application runs. Once you have narrowed down your search of what object might be causing your memory leak, you can then use the tool to take a heap dump. The dump contains information about the Java objects and classes in the heap at the moment it is triggered.
In addition to memory monitoring, how much CPU your application is consuming is important in every application. VisualVM provides a CPU sampler for you to analyse and track this information. This view shows details of where time is being spent on the application which can help you determine why your application might be slow and lead to paths on how to improve performance.
Using this feature you can take snapshots of the current usage and consequently use for performance tracking.
Further to CPU and Memory profiling, VisualVm has a feature that allows us to monitor threads. This provides us a view of the state of every thread running in your application. Issues with threading can result in many different issues within your application such as performance degradation and deadlocks. Using this feature you can see what threads might be parking or waiting. This provides important information on thread behaviour. From here it is again possible to take a snapshot listing stack traces of all your running threads.
Using and combining the examples given above makes VisualVm an excellent all in one trouble shooting tool. You should strongly consider using it for monitoring and debugging a JVM based application.