OS-Level vs JVM-Level Monitoring
This troubleshooting guide compares OS monitoring and JVM monitoring so you can choose the right Nodinite agent for each layer of a Java workload. The Nodinite JMX Monitoring Agent sees inside the JVM, but only two values: CPU usage and free heap. The operating system layer, such as server CPU, physical memory, disk, and services, belongs to the Windows Server Monitoring Agent.
Key Differences
| Value | OS level (Windows Server Monitoring Agent) | JVM level (JMX Monitoring Agent) |
|---|---|---|
| CPU usage | ✅ Server CPU | ✅ CPU usage of the JVM, with Warning and Error thresholds |
| Heap memory | ❌ Not visible from the OS | ✅ Free heap %, with Warning and Error thresholds |
| Physical memory | ✅ Server memory | ❌ Not monitored |
| Disk | ✅ Disk space | ❌ Not monitored |
| Windows Services | ✅ Service state, with Remote Actions | ❌ Not monitored |
| Reachability | Server and services | 🚫 Unavailable when the JVM can't be reached over JMX |
The JMX Monitoring Agent doesn't monitor garbage collection, thread counts, class loading, or other MBean attributes (Supported Garbage Collectors, Thread Deadlock Detection).
Diagram: The OS layer and the JVM layer. Green marks the two values the JMX Monitoring Agent monitors, JVM CPU usage and free heap; blue marks the monitored hosts.
When to Use OS-Level Monitoring
Use the Windows Server Monitoring Agent for:
- Overall server health: disk space, physical memory, and server CPU
- Windows Services on the server, including the Windows Service that runs the Nodinite JMX Gateway
- Non-Java applications on the same server
When to Use JVM-Level Monitoring
Use the Nodinite JMX Monitoring Agent for:
- Warning before a JVM runs out of heap, by alerting on low free heap before an OutOfMemoryError
- CPU usage per JVM, when several JVMs share one server
- Boomi Atoms, WSO2 servers, Spring Boot services, and other JVM-based integration applications
Using Both Together
For critical Java infrastructure, use both layers:
- OS monitoring catches server-wide issues such as a full disk, low physical memory, or a stopped Windows Service
- JMX monitoring catches JVM issues: high CPU usage in a specific JVM and low free heap
Tip
If server CPU is at 100% but JVM CPU is normal, look for a non-Java process. If JVM CPU is high, the load comes from that JVM; capture a thread dump with
jstack <PID>to see which threads are busy.
Physical Memory vs Heap Memory
The OS shows the physical memory the Java process uses, while the JMX Monitoring Agent shows heap memory managed inside the JVM. These are different:
- Physical memory = heap + off-heap memory (direct buffers, Metaspace, thread stacks, JIT code)
- Heap memory = only the objects managed by the garbage collector
- A JVM with
-Xmx2gmay use 3 GB or more of physical memory when off-heap memory is included
Important
Monitor free heap memory with the JMX Monitoring Agent to catch OutOfMemoryError risk. Monitor physical memory with OS monitoring to make sure the server has enough RAM for the JVM, including its off-heap memory, and other processes.
Next Steps
Docker Container Monitoring
Enable JMX Remote Monitoring
Related Topics
Multi-JVM Monitoring
Heap Used vs Committed
Windows Server Monitoring Agent
JMX Monitoring Agent
JMX Troubleshooting Overview