Application Monitoring
Application monitoring digs into application servers (like Tomcat, WebLogic, or JVM environments) to inspect execution threads and memory heaps.
Monitoring applications ensures that they are fast, reliable and available for users. It helps you:
- Track the health and performance of critical transactions
- Detect errors and exceptions in real time
- Identify performance bottlenecks and slow components
- Understand resource utilization and capacity needs
- Improve user experience and business outcomes
Request
Request
Agents/Probes
(Metrics, Logs)
Generated
1. JVM Heap Memory
Java applications allocate memory in Heap space. If the application does not release objects, the heap usage will grow continuously until it runs out of memory (OOM). We monitor Garbage Collection (GC) frequency and pause times.
2. Thread Monitoring
Analyze thread states to understand application concurrency bottlenecks.
Active threads currently executing application code.
Threads waiting to acquire locks or waiting on DB connections.
Threads waiting for resources, I/O or sleep.
If thread usage reaches 100%, incoming requests are queued.
| State | Description | Count | % of Total | Trend (Last 1 Hour) |
|---|---|---|---|---|
Runnable |
Threads actively executing application code | 215 | 45.2% | |
Blocked |
Threads waiting to acquire locks or waiting on DB connections | 32 | 6.7% | |
Waiting |
Threads waiting for resources, I/O or sleep | 28 | 5.9% | |
Timed Waiting |
Threads waiting with timeout for a certain condition | 172 | 38.2% | |
Total |
447 | 100% | — |
What Do These Metrics Mean?
Higher heap usage with increasing trend may lead to OutOfMemoryError (OOM). A sawtooth pattern indicates that garbage collection is reclaiming memory successfully.
A sudden increase in GC frequency may indicate memory pressure. Consistent high GC activity can can impact application performance.
Long GC pauses stop application threads and can cause request latency. Keep pause times consistently below 50ms for optimal performance.
High runnable threads indicate good utilization. High blocked threads may indicate lock contention or database connection issues.
As utilization approaches 100%, requests are queued, increasing response time. Keep utilization below 80% for headroom.
Monitor heap usage trend and GC activity continuously.
Keep GC pause times below 50ms for optimal performance.
Analyze thread states regularly to find bottlenecks.
Set alerts for high heap usage, GC spikes and thread pool exhaustion.