- 3 minutes to read

Heap Used vs Committed Memory

This troubleshooting guide explains the difference between heap used and heap committed memory so you can improve memory monitoring with the Nodinite JMX Monitoring Agent.

Understanding JVM Heap Memory

The JVM manages JVM memory in a heap divided into regions. Two key metrics help you understand heap health and set each monitoring threshold correctly:

Metric Description When It Changes
Heap Used Memory actively occupied by live objects After every garbage collection cycle
Heap Committed Memory reserved (committed) by the OS for the JVM Grows up to -Xmx as demand increases
Heap Max Maximum heap size configured via -Xmx Set at JVM startup, rarely changes
graph LR subgraph "JVM Heap" A["Heap Used (live objects)"] B["Heap Committed (reserved by OS)"] C["Heap Max (-Xmx limit)"] end A -->|"grows until GC"| B B -->|"grows until"| C C -->|"exceeded triggers"| D["OutOfMemoryError"] style A fill:#93d16d style B fill:#FFD525 style C fill:#c33d34 style D fill:#c33d34

Diagram: Relationship between heap used (green), committed (yellow), and max (red), showing how unchecked growth leads to OutOfMemoryError.

Which Value Does Nodinite Monitor?

The Nodinite JMX Monitoring Agent monitors free heap in percent, the part of the heap not occupied by live objects, and compares it with the Heap Size thresholds in the Configuration. The thresholds are the minimum free heap: the JVM Resource changes to Warning or Error when free heap drops below them for the configured Duration. Low free heap is the most reliable sign of memory pressure and the basis for a monitoring threshold that catches heap exhaustion early. The agent doesn't report heap used, committed, and max as separate values.

Environment Warning Threshold % (free heap below) Error Threshold % (free heap below) Notes
Development 20% 10% Allow higher usage for testing
Test / QA 25% 15% Balance early detection with noise
Production 30% 20% Detect heap exhaustion early

Tip

Set the Warning threshold 10–15 percentage points above the Error threshold (more free heap). This gives operators time to investigate before the Error state.

Common Questions

Why does heap used spike after deployments?

New application code loaded into memory after a deployment increases used memory temporarily. Allow 5–10 minutes for the JVM to stabilize, or set a Duration long enough that the warm-up doesn't change the Resource state.

Why is heap committed higher than heap used?

The JVM reserves committed memory beyond active memory allocation to avoid frequent OS memory allocation calls. Committed memory grows as heap demand increases but does not shrink automatically until a full GC or JVM restart.

When should I adjust thresholds?

Adjust thresholds after:

  • Adding new integration flows that process larger message payloads
  • Upgrading the JVM or application framework
  • Observing repeated false-positive warnings during normal operation

Next Steps

Supported Garbage Collectors
Correlate Heap Spikes

Environment-Specific Thresholds
JMX Troubleshooting Overview
JMX Monitoring Agent