Monitoring Java virtual machine (JVM) by using OpenTelemetry

Instana provides a holistic view of JVM metrics that are collected by using OpenTelemetry. After you integrate OpenTelemetry with Instana, you can view these metrics in the Instana UI.

Instana supports standard OpenTelemetry Java automatic or manual instrumentation. For more information, see OpenTelemetry official documents.

Before you begin

Ensure that the following requirements are met:

Viewing JVM metrics

To view JVM metrics, complete the following steps:

  1. From the navigation menu in the Instana UI, click Infrastructure > Analyze infrastructure.
  2. Select OTEL JVM from the list of types of the entities.
  3. Click the instance.

The OTEL JVM dashboard displays all the collected metrics for the instance. The following image displays a typical OTEL JVM instance dashboard:

OpenTelemetry jvm

Performance metrics

Metrics Description Source
Total Heap Usage The amount of heap memory that is used. Derived from the jvm.memory.used metric.
Thread States The number of platform threads in the runtime. Derived from the jvm.thread.count metric.
Heap Memory The amount of heap memory that is used in absolute terms and as a percentage of the total heap. Derived from the jvm.memory.used metric.
Memory Pools The measure of current and maximum memory that is used for different memory pools. Derived from the jvm.memory.max metric.
Garbage Collected Heap Memory The measure of memory that is used as measured after the most recent garbage collection event on this memory pool. Derived from the jvm.memory.used_after_last_gc metric.
Limit of Memory Pools The measure of maximum obtainable memory. Derived from the jvm.memory.limit metric.
Init of Memory Pools The measure of initial memory that is requested. Derived from the process.runtime.jvm.memory.init metric.
Initial values of Memory Pools The measure of initial values of memory that is used for different memory pools. Derived from the jvm.memory.heap metric.
Memory used after GC The measure of memory that is used as measured after the most recent garbage collection event on this memory pool. Derived from the process.runtime.jvm.memory.usage_after_last_gc metric.
Memory used after GC The measure of memory that is used as measured after the most recent garbage collection event on this memory pool. Derived from the jvm.memory.used_after_last_gc metric.
Number of executing threads The number of executing platform threads. Derived from the process.runtime.jvm.threads.count metric.
Number of peak threads The number of peak threads count in the JVM. Derived from the jvm.threads.peak metric.
Number of classes loaded The number of classes that are loaded since the JVM started. Derived from jvm.classes.loaded metric.
Number of classes loaded The number of classes that are loaded since the JVM started. Derived from the jvm.class.loaded metric.
Number of classes unloaded The number of classes that are unloaded since the JVM started. Derived from the jvm.classes.unloaded metric.
Number of classes unloaded The number of classes that are unloaded since the JVM started. Derived from the jvm.class.unloaded metric.
CPUs count The number of processors that are available in the system. Derived from the system.cpu.count metric.
CPUs count The number of processors that are available to the JVM. Derived from the jvm.cpu.count metric.