I hope, you have
already read "Preface"
of my java power tools series. Actually, I was intending to write detailed
separate posts on numerous performance diagnostic tools, like I wrote few posts
previously as part of this series. Anyway, let me start with quickly
recollecting my knowledge on this topic.
Well, performance
analysis and optimization is indeed not a child's play. At times, it may be a
hard nut to crack for developers, specifically when performance problem is
reported by a client in production environment and not replicated in testing or
development. In fact, scalability issue is reported as performance issue
sometimes, which can be solved by vertical or horizontal scalability instead of
unnecessarily spending time in code analysis and optimization activity.
Likewise, always performance issue could not be triggered by faulty code,
rather there could be inefficient application server or JVM tuning issue! You
never know. Therefore, there has to be a thoughtful architectural strategy to
accomplish application's performance requirements or for troubleshooting and fixing reported performance
problems. Well, Performance Engineering, Benchmarking,
Software Performance Testing, Performance Tuning
and Java Performance
are vast topics by own. So, let me restrict this blog primarily for listing
java application performance monitoring, profiling and analysis tools.
Few remarkable tools for performance analysis of Java applications
Problem Statements
|
My Preferred Tool / Product / Solution
|
Pricing Remark
|
Related References
|
I am damn sure, there are
memory related issues. Just need to find memory leaks and reduce
memory consumption via memory dump analysis. |
|
Free
|
|
Just need to analyze
java thread dumps. |
|
Free
|
|
For
non-production environment, need visual interface for Java
monitoring and troubleshooting tool, which should provide some basic profiling
capabilities too. (may use in production, if performance overhead is
not a critical concern!) |
|
Free
|
|
Looking for modular and
extensible web console, which can be used to manage every kind of
container or even any JVM middleware. |
|
Free
|
|
For
production environment or complex performance troubleshooting needs in
non-production environments, need advance Java Profiling tool. Needless to mention,
such tool's performance overhead should be minimal or even
controllable. |
|
Commercial
(Oracle JMC and JFR requires to purchase license
for production use, otherwise it's Free.)
|
|
Need of APM solution for
Business transactions profiling, root cause detection and performance
diagnosis in Development or Test Environment for single JVM or
an application.
Just limited freely offered "Java performance monitoring with
automatic root cause detection" features may be sufficient to find a
performance bottleneck. (may use in production for simplistic
requirement) |
|
Free
(limited features available compare to commercial
offerings)
|
|
* All in All, looking for adopting full-fledge Application Performance Management (APM) solution for production, and apparently should work for distributed systems by providing a visual dashboard to manage multiple JVMs across different machines. * The performance issue is reported in production, but not able to replicate in Development and QA environments, so all are at their wit's end to find the bottleneck in the system! Need to troubleshoot problem directly in production with negligible overhead! * Java profiling tool is not sufficient for performance analysis. Because performance issues are occurring unexpectedly in production systems and exact business transaction or bottleneck is unknown, which is causing the issues! It could be even Database or external Web Service or Scala component! Pressing business requirement to discover, diagnostic and resolve application issues before they impact end users, violate SLA or negatively impact the business. * Need a complete solution to monitor various components of the application and technology stack, such as server, database, hardware, network. In fact, looking for an automated capability in production to identify problematic transactions based on performance thresholds and offer centralized business intelligence like dashboard. |
|
Commercial
(for real production purpose, all are commercial.
Most offers SaaS pricing model. Although, some offers On-Premise and Hybrid
deployment options too)
|
The Performance Tuning Lifecycle
If you
are newbie to Java performance tuning area, then I strongly suggest to attend
less than 2 hours Complete Java Performance Tuning Training course on youtube for fundamental understanding on
the following performance tuning lifecycle. Then,
you can proceed to choose suitable tools to identify performance bottleneck.
- Define Requirements
- Measure / Test (Create Baseline)
- Identify Bottleneck
- Implement Fixes
- Measure / Test (New Baseline)
- Compare to Old Baseline & Requirements
- If necessary repeat steps 3 – 6
Performance Troubleshooting Tools Highlights
You may attend an
hour presentation on "Troubleshooting Live Java Web Applications", which I found very informative for the
performance troubleshooting tools scoping in production vs. development
environment. Specifically at the end of the presentation below final tools
comparison chart provides outstanding information.
Also Refer
- Dzone Refcard - Java Performance Optimization
- Java Enterprise Performance - Untimate Guide
- http://www.javaperformancetuning.com/tips/index.shtml
- Improving the performance of the Spring-Petclinic sample application
- 15 Tools Java Developers Should Use After a Major Release
- Java Tools Tutorials
Disclaimer
I am not biased to
particular free or commercial tools, rather my objective is about sharing my
own candid experience on set of tools.
If you
know or have experienced any other tools suitable for Java applications
performance analysis, please share the name of such tool along with your
personal feedback in the comment.
This is one awesome article.Thanks Again. Really Great.
ReplyDeleteoracle rac online training