Because I have many Tomcat users out there I compiled my top 10 problem pattern list I use when analyzing a Tomcat environment. This list also applies to other App Servers, so keep reading if your app runs on Jetty, JBoss, WebSphere, WebLogic, Glassfish, etc:
- Database Access : Loading too much data inefficiently
- Micro-Service Access : Inefficient access and badly designed Service APIs
- Bad Frameworks : Bottlenecks under load or misconfiguration
- Bad Coding : CPU, Sync and Wait Hotspots
- Inefficient Logging : Even too much for Splunk & ELK
- Invisible Exceptions : Frameworks gone wild!
- Exceptions : Overhead through Stack Trace generation
- Pools & Queues : Bottlenecks through wrong Sizing
- Multi-Threading : Locks, Syncs & Wait Issues
- Memory : Leaks and Garbage Collection Impact
If your app suffers from any of these problems I can guarantee that not even Docker, EC2 or Azure will help you. Throwing more computing power at your problems will not help at all!
In Part I of this blog series I focus on how I identify problem patterns on Database Access , Service Access and Bad Frameworks . Part II & Part III will cover the remaining items. And who knows – if you are up for the challenge I have for you at the end of the blog post — there might be more to come!
I will be using Dynatrace as it is my tool of choice, but my approaches should also work using other APM or Performance Diagnostics Tools! If you want to watch a video rather than reading this blog series check out my Tomcat Performance Analysis YouTube Tutorial instead.