JVM Monitor
Introduction
The JVM Monitor O11ysource tracks and analyzes the performance and health of the Java Virtual Machine (JVM). It collects metrics such as memory usage, garbage collection activity, thread management, and CPU consumption, providing insights into application performance and resource utilization.
Getting Started
Compatibility
vuSmartMaps supports monitoring of your JVM or Java Virtual Machine, the core engine that executes Java applications.
Data Collection Method
vuSmartMaps collects health and performance data for JVM Monitor using VuNet's vuAppAgent. This data collector collects data based on the source configuration.
Prerequisites
Dependent Configuration
To configure this O11ySource, create a 'credential' of type 'user' under the 'Definition' tab.
Inputs for Configuring Data Source
- JVM Server: The IP Address/FQDN of the JVM server. This field is the key to identify each server you add here.
- Period [in seconds]: How frequently data is gathered. Period should be between 60 seconds - 3000 seconds.
- JVM Instance Details: Include all instances of the JVMs associated with the specific host.
- Listening IP(JMX): The IP address on which JVM application's JMX listens. Eg: localhost
- JMX Port: The JMX port number on which JVM send metrics.
- JVM Name: The name of the JVM instance.
- Credential: These are the access credentials for the database. You should define these credentials on the 'Definitions' page, and then use the specified name here. Select 'None' if not enabled the authentication.
Firewall Requirement
To collect data from this O11ySource, ensure the following ports are opened:
Source IP | Destination IP | Destination Port | Protocol | Direction |
---|---|---|---|---|
IP address of the JVM server | Data Collector End Point | 9092* | TCP | Inbound |
*Before providing the firewall requirements, please update the port based on the customer environment.
Configuring the Target
- Health and Performance metrics of JVM server is collected using vuAppAgent. In some customer environments, customers may have to create a 'vunet' user and install and run vuAppAgent with 'vunet' user. Please refer to 'Agent' section for more details on how to download and install vuAppAgent Agent.
- The vuAppAgent collects JVM metrics by establishing a connection to the JMX module. To enable JMX on the Java application or JVM for monitoring purposes, JMX configuration should be added to the JVM options when starting the Java application. For instance, the following JVM parameters can be added to enable JMX:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=PORT_NUMBER:
-Dcom.sun.management.jmxremote.ssl=false:
-Dcom.sun.management.jmxremote.authenticate=false:
-
JVM Options Overview:
-
*-Dcom.sun.management.jmxremote: Enables JMX remote monitoring.
-
*-Dcom.sun.management.jmxremote.port=PORT_NUMBER: Specifies the JMX port for remote connections.
-
*-Dcom.sun.management.jmxremote.ssl=false: Disables SSL for JMX connections.
-
*-Dcom.sun.management.jmxremote.authenticate=false: Disables authentication for JMX connections. You can set this to true to enable authentication.
-
Replace PORT_NUMBER with the desired JMX port.
Configuration Steps
Enable
the JVM Monitor O11ySource.- Select the Sources tab and press the
+
button to add a new JVM host to be monitored. - Set up metrics configurations. Afterwards, select
Save and Continue
to proceed with downloading the agents. - The following packages will be available for download based on the OS:Download <OS> vuAppAgent Installation Binary - Downloads the full vuAppAgent package with required configurations for a fresh installationDownload <OS> vuAppAgent Update Configuration Binary - Downloads the agent configuration package to update an existing vuAppAgent installation
- Download the agent installation or update package, then click
Finish
to close the data source window.
Metrics Collected
Name | Description | Data Type |
---|---|---|
@timestamp | Timestamp when the metric collected in string format. | String |
Host | The host ip address of the machine from the metrics collected. | String |
KeyPropertyListType | Type of metrics. | String |
Owner | Owner of the server. | String |
Time | The time when the metric collected in String format. | String |
application_name | The application name. | String |
bu_id | BU ID | LowCardinality(String) |
host | The host ip address of the machine from the metrics collected. | String |
source_id | The host ip address of the machine from the metrics collected. | String |
target | The host ip address of the machine from the metrics collected. | String |
tenant_id | Tenant ID | LowCardinality(String) |
timestamp | The time when the metric collected in Date format. | DateTime64 |
KeyPropertyListName | Name of the Garbage Collector | String |
Name | Name of the Garbage Collector | String |
ObjectName | MBean Name. | String |
BlockedCount | The blocked thread Count. | UInt64 |
BlockedTime | Thread block time. | Int64 |
CollectionCount | The total number of collections that have occurred. This method returns -1 if the collection count is undefined for this collector. | UInt64 |
CollectionTime | The approximate accumulated collection elapsed time in milliseconds. This method returns -1 if the collection elapsed time is undefined for this collector. | UInt64 |
CommittedVirtualMemorySize | The amount of virtual memory that is guaranteed to be available to the running process in bytes, or -1 if this operation is not supported. | UInt64 |
CompilationTimeMonitoringSupported | This typically indicates whether the application or system supports the monitoring of compilation times during execution. | UInt8 |
ErrorMessage | Reason for the status is DOWN | String |
FreePhysicalMemorySize | The amount of free physical memory in bytes. | UInt64 |
FreeSwapSpaceSize | The amount of free swap space in bytes. | UInt64 |
HeapMemoryUsage_committed | Committed heap memory after GC. | UInt64 |
HeapMemoryUsage_init | Initial heap memory after GC. | UInt64 |
HeapMemoryUsage_max | Maximum heap memory after GC. | UInt64 |
HeapMemoryUsage_used | Used heap memory after GC. | UInt64 |
InNative | Refers to a state of a thread that indicates it is currently executing in native code | UInt8 |
LastGcInfo_GcThreadCount | The number of threads involved in the last garbage collection event. | UInt64 |
LastGcInfo_duration | The total time taken (in milliseconds) for the last garbage collection event. | UInt64 |
LastGcInfo_endTime | The end time (timestamp) of the last garbage collection event. | UInt64 |
LastGcInfo_gcEndTimestamp | The timestamp indicating when the last garbage collection event completed. | String |
LastGcInfo_gcStartTimestamp | The timestamp indicating when the last garbage collection event started. | String |
LastGcInfo_id | A unique identifier for the last garbage collection event. | UInt64 |
LastGcInfo_startTime | The start time (timestamp) of the last garbage collection event. | UInt64 |
LoadedClassCount | The number of classes that are currently loaded in the Java virtualmachine. | UInt64 |
LockOwnerID | An identifier for the owner of a lock in a concurrent environment, used to track which thread or process holds the lock. | Int64 |
MaxFileDescriptorCount | The maximum number of open file descriptors allowed by the operatingsystem. | UInt64 |
MemoryPoolName | The name of a specific memory pool in the JVM used for managing memory allocation. | String |
MonitorInfo | A metric that provides information about the monitoring state of JVM threads, including details on thread synchronization, locks held, and thread contention. | String |
NonHeapMemoryUsage_committed | Committed non heap memory before GC. | UInt64 |
NonHeapMemoryUsage_init | Initial non heap memory before GC. | UInt64 |
NonHeapMemoryUsage_max | Maximum non heap memory before GC. | Int64 |
NonHeapMemoryUsage_used | Used non heap memory before GC. | UInt64 |
OpenFileDescriptorCount | The current number of open file descriptors. | UInt64 |
PeakThreadCount | The highest number of active threads that were alive during the lifetime of the JVM. | UInt64 |
PeakUsage_committed | The amount of memory that has been committed for use by the memory pool. | UInt64 |
PeakUsage_init | The initial amount of memory allocated for the memory pool. | UInt64 |
PeakUsage_max | The maximum amount of memory that can be allocated for the memory pool. | Int64 |
PeakUsage_used | The amount of memory currently in use within the memory pool. | UInt64 |
ProcessCpuLoad | The CPU load percentage used by the process running the JVM. | Float64 |
ProcessCpuTime | The total CPU time used by the JVM process, typically measured in nanoseconds. | UInt64 |
StackTrace | The current stack trace of a thread, showing the method call hierarchy. | String |
StartTime | The timestamp indicating when the JVM started. | UInt64 |
Status | The status of JVM. | String |
Suspended | A boolean indicating whether the thread is currently suspended. | Bool |
SystemCpuLoad | The overall CPU load percentage of the entire system. | Float64 |
SystemLoadAverage | The system load average over a specific period (1 minutes). | Float64 |
ThreadCount | The current number of active threads in the JVM. | UInt64 |
ThreadID | The unique identifier for the thread. | UInt64 |
ThreadName | The name of the thread. | String |
ThreadState | The current state of the thread (e.g., NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED). | String |
TotalCompilationTime | The total time spent in compiling methods by the JVM. | Int64 |
TotalLoadedClassCount | The total number of classes that have been loaded by the JVM since it started. | UInt64 |
TotalPhysicalMemorySize | The total amount of physical memory available on the system. | UInt64 |
TotalStartedThreadCount | The total number of threads that have been started by the JVM since it began execution. | UInt64 |
TotalSwapSpaceSize | The total amount of swap space available on the system. | UInt64 |
Type | The type of memorypool. | String |
UnloadedClassCount | The total number of classes that have been unloaded by the JVM since it started, indicating memory management and class lifecycle handling. | UInt64 |
Uptime | The uptime of JVM. | UInt64 |
Usage_committed | The amount of memory (in bytes) that is guaranteed to be available for use by the Java virtual machine. The amount of committed memory may change over time (increase or decrease). The Java virtual machine may release memory to the system and committed could be less than init. committed will always be greater than or equal to used. | UInt64 |
Usage_init | The initial amount of memory (in bytes) that the Java virtual machine requests from the operating system for memory management during startup. The Java virtual machine may request additional memory from the operating system and may also release memory to the system over time. The value of init may be undefined. | UInt64 |
Usage_max | The maximum amount of memory (in bytes) that can be used for memory management. Its value may be undefined. The maximum amount of memory may change over time if defined. The amount of used and committed memory will always be less than or equal to max if max is defined. A memory allocation may fail if it attempts to increase the used memory such that used > committed even if used <= max would still be true (for example, when the system is low on virtual memory). | Int64 |
Usage_used | The amount of memory currently used (in bytes). | UInt64 |
WaitedCount | The total number of times a thread has been blocked waiting for a resource or event. | UInt64 |
WaitedTime | The total time (in milliseconds) that threads have spent waiting for resources or events. | Int64 |
acceptCount | The total number of connections accepted by a server or application. | UInt64 |
acceptorThreadPriority | The priority level of the thread responsible for accepting incoming connections. | UInt64 |
alpnSupported | A boolean indicating whether Application-Layer Protocol Negotiation (ALPN) is supported, often used in secure communications. | Bool |
bindOnInit | A boolean indicating whether the service or application binds to a specific address or port upon initialization. | Bool |
bytesReceived | The total number of bytes received by the JVM for processing incoming requests. | UInt64 |
bytesSent | The total number of bytes sent by the JVM as a response to outgoing requests. | UInt64 |
connectionCount | The total number of active connections managed by the JVM, typically for network communication. | UInt64 |
connectionLinger | The duration (in seconds) that a connection is retained in the JVM after it is closed to allow for potential reuse. | Int64 |
connectionTimeout | The duration (in milliseconds) after which an inactive connection will be terminated by the JVM. | UInt64 |
currentThreadCount | The current number of threads in use by the JVM for executing tasks. | UInt64 |
currentThreadsBusy | The number of threads currently busy in the JVM processing requests or performing tasks. | UInt64 |
errorCount | The total number of errors encountered by the JVM during execution, including exceptions and failures in processing tasks or requests. | UInt64 |
executorTerminationTimeoutMillis | The duration (in milliseconds) that the JVM will wait for an executor service to terminate before forcibly shutting it down. This setting helps manage the graceful shutdown of threads in a multi-threaded environment. | UInt64 |
gcEndTimestamp | The timestamp indicating when the last garbage collection (GC) event completed. | DateTime |
gcStartTimestamp | The timestamp indicating when the last garbage collection (GC) event started. | DateTime |
keepAliveCount | The total number of threads that have been kept alive and are ready for reuse in the JVM. | UInt64 |
keepAliveTimeout | The duration (in milliseconds) that threads can remain idle before being terminated by the JVM to free resources. | UInt64 |
locks | The current number of locks held by threads in the JVM, indicating synchronization state. | String |
maxConnections | The maximum number of connections that the JVM can handle simultaneously. | UInt64 |
maxKeepAliveRequests | The maximum number of requests that can be served using a single persistent connection in the JVM. | UInt64 |
maxThreads | The maximum number of threads that the JVM can create for handling requests. | UInt64 |
maxTime | The maximum duration (in milliseconds) that the JVM will allow a request to process before timing out. | UInt64 |
minSpareThreads | The minimum number of idle threads the JVM will maintain to handle incoming requests efficiently. | UInt64 |