- 3 minutes to read

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).

graph TD subgraph "OS layer - Windows Server Monitoring Agent" Server["fab:fa-windows Windows Server"] OsCpu["fa:fa-microchip Server CPU"] OsMem["fa:fa-memory Physical memory"] Disk["fa:fa-hard-drive Disk space"] Services["fa:fa-gears Windows Services"] end subgraph "JVM layer - JMX Monitoring Agent" Jvm["fab:fa-java Java process"] JvmCpu["fa:fa-microchip JVM CPU usage"] Heap["fa:fa-layer-group Free heap %"] end Server --> OsCpu Server --> OsMem Server --> Disk Server --> Services Server --> Jvm Jvm --> JvmCpu Jvm --> Heap style Server fill:#2678BD style Jvm fill:#2678BD style JvmCpu fill:#93d16d style Heap fill:#93d16d

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 -Xmx2g may 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

Multi-JVM Monitoring
Heap Used vs Committed
Windows Server Monitoring Agent
JMX Monitoring Agent
JMX Troubleshooting Overview