Monitoring Java virtual machine (JVM)
The Java sensor provides automated code instrumentation for supported technologies, zero-configuration health monitoring of JVM instances, and end-to-end traces of requests across all systems.
- Supported languages
- System requirements
- Instrumented frameworks and libraries
- Optional configuration
Instana supports the following languages:
Instana supports all Java runtimes from version 6 to 19. For more information about the system requirements for Java sensor, see System Requirements.
Instrumented frameworks and libraries
Java sensor uses many technologies to collect data about the performance of Java applications. For more information, see Instrumented frameworks and libraries.
The Java sensor is automatically deployed, configured, and installed by the Instana agent. To ensure your Java applications are instrumented, make sure that your JVM distribution is supported.
After you install the Instana agent, the Java sensor is automatically installed and configured. Although you do not need any configuration for out-of-the-box metrics and distributed tracing, you can configure individual components of the sensor.
For more information about configuring the sensor, see Java configuration.
After the Java sensor is configured, it automaticlly starts collecting metrics from the JVM. You can view these metrics in the Instana UI. The Java sensor also supports other features of Instana like automatic tracing, custom tracing, and automatic profiling.
The Java sensor monitors the JVM instance and collects the following metrics from it:
To view these metrics, complete the following steps:
- In the sidebar of the Instana UI, select Infrastructure.
- Click a specific monitored host.
The JVM dashboard displays all the collected metrics for the JVM instance.
|Java version||The Java version.|
|Java runtime||The Java Runtime Environment (JRE).|
|Maximum heap||Maximum heap size available for the JVM.|
|Class path||The class path parameter set in the JVM.|
|Performance metrics||Description||Data point|
|Memory used||Total memory used by the JVM. The current measured KPI value is displayed.||Byte count is collected from
|Threads||Number of threads that are in different states:
||Current thread-ids are collected from
|Thread states are collected from
|Heap Memory||Maximum heap size available for the JVM.||Byte count is calculated as
|The maximum heap size that is displayed in the graph is either determined by parsing the
|The percentage of heap memory used out of the total heap memory.|
|Memory Pools||Memory pool usage of heap and nonheap pools are displayed on a graph over a selected time period.||Pool information is collected from
|Graph values are collected from each pools
|The maximum value is collected from
|Garbage Collection||Garbage collection activation and runtime values are displayed on a graph over a selected time period.||Garbage collection information is collected from
|Graph values are collected from each collectors
|Garbage collection runtime is collected from
|Invocation count is collected from
|Suspension||Delay in application execution displayed on a graph over a selected time period.||Calculated per the in-app Instana measurement thread.|
Each sensor has a curated knowledge base of health signatures that are evaluated continuously against the incoming metrics. These health signatures are used to raise issues or incidents that depend on user impact.
Built-in events trigger issues or incidents based on failing health signatures on entities, and custom events trigger issues or incidents based on the thresholds of an individual metric of any entity.
For more information about the built-in events for the Java sensor, see the Built-in events reference.
Instana supports some common Java metrics libraries:
Apart from configuration, performance, and custom metrics, the Java sensor also collects other metrics like live thread dump and heap dump.
Live Thread Dump
To view a live thread dump for the JVM, click Get Thread Dump.
To create a heap dump for the JVM, click Get Heap Dump. To store the heap dump, indicate a location local to the JVM.
By default, the Java sensor monitors all requests and automatically creates a distributed trace for each of them. This distributed trace includes cross host and cross language tracing.
For more information, see Instana AutoTrace™.
Java Tracer captures only logs that are at level
WARN and above.
When Log4j, Log4j2, or Logback is used to enable a more precise correlation of logging and tracing, Instana automatically populates the Mapped Diagnostic Context (MDC) with the trace ID. The MDC variable name is
For more information about using the logging frameworks in format strings, see the documentation for your logging framework.
The Java sensor provides a fully automated out-of-the-box tracing instrumentation. But in some cases, you might prefer to send custom traces to your Instana dashboard. You can use the following methods to implement custom tracing:
- Java Trace SDK
- Configuration-based Java Trace SDK
- Java OpenTracing API
- OpenCensus Instana Trace Exporter
Java Trace SDK
If you want to instrument a framework that is not yet supported by Instana, or monitor the requests of a custom application, use the Java Trace SDK, and view the GitHub repo.
Before you implement custom tracing by using the SDK, see the tracing best practices.
Configuration-based Java Trace SDK
You might encounter situations where using the Java Trace SDK, which requires manipulating the source code or contacting someone who can do that, is not feasible or desirable. In these cases, use the configuration-based Java Trace SDK. Although less feature rich than the programmatic Java Trace SDK, the configuration-based Java Trace SDK allows a declarative configuration of spans and tags that cover many common use-cases.
Before you implement custom tracing by using the configuration-based Java Trace SDK, see the Tracing best practices.
Java OpenTracing API
To collect traces that are described through the OpenTracing API, you must use Java OpenTracing. For more information, see OpenTracing.
Important: Disable automatic tracing (Instana AutoTrace™) before you use the Java OpenTracing API. For more information, see Disabling automatic instrumentation.
OpenCensus Instana Trace Exporter
Instana provides an OpenCensus Trace Exporter for applications that are written in Java. Using the Instana agent processes as proxy, Instana forwards traces that are exported by applications that are instrumented with Census to its backend.
For more information, see the OpenCensus Exporters.
Important: Disable automatic tracing (Instana AutoTrace™) if the agent is used on the same host as Census. For more information, see Disabling automatic instrumentation.
Profiles are essential for locating performance hot spots and bottlenecks at the code level. They are instrumental in reducing resource consumption and improving performance.
AutoProfile™ generates and reports process profiles to Instana. Unlike development-time and on-demand profilers, where you must manually initiate profiling, AutoProfile™ automatically schedules and continuously performs profiling appropriate for critical production environments.
For more information, see our Instana AutoProfile™ docs.
You might encounter some monitoring issues with Instana. For more information, see Troubleshooting.