[Open Source] A feature-rich tool for service-oriented monitoring of Java Virtual Machines and operating systems
![[Open Source] A feature-rich tool for service-oriented monitoring of Java Virtual Machines and operating systems](https://yy123.ink/api/img/1782591963703-ipwpj7.jpg)
1. Project Overview

JVMM (JVM Monitor) is a monitoring tool that provides service-oriented monitoring for Java Virtual Machines and operating systems. It offers extensive data collection capabilities, including OS metrics (memory, CPU, disk status and I/O, network interface status and I/O, etc.) and JVM metrics (memory, threads, thread pools, memory pools, GC, class loaders, etc.). It also provides features such as flame graph generation, Java code hot swapping, and decompilation. It is suitable for scenarios such as service health monitoring, application tuning, troubleshooting, and performance testing.
2. Open Source License
Licensed under Apache-2.0
3. Screenshots
Example
Example of Data Collection Using the Client Tool
Flame Graph Generation Example

Code Invocation Example
- API Invocation Example
- Server Startup and Usage Example
- Jvmm Connection Tool Usage Example
Dashboard Application Example

General-Purpose Utilities
Some components within the project can be used independently. They are lightweight and easy to get started with.
- jvmm-convey: An independent, lightweight, general-purpose network communication development tool
- jvmm-aop: An aspect-oriented programming development tool
- jvmm-common: Includes commonly used utility classes
Detailed content, please refer to README.md document.
4. Feature Overview
Feature Support
- Supports Java Virtual Machine data collection:
- Process Information
- Memory Information: Heap and off-heap memory usage, Manager and Pool information
- Thread Information: Stack traces, locks, deadlock detection, CPU Time, Wait Time, etc.
- Thread Pool Information: Configuration parameters, status, task statistics, etc.
- GC Information: Generational collector information, GC count, GC duration, etc.
- Class Loading Information: Class loading statistics, class loaders, JIT
- Supports operating system data collection: Memory status, CPU load, disk status and I/O throughput, network interface status and I/O throughput, and port detection
- Supports flame graph generation, with sampling events including CPU, memory allocation, thread stacks, Java method calls, and native method call stacks
- Supports Java code decompilation and generation
- Supports Java code hot updates (ClassLoader can be specified)
- Supports remote GC execution
- Supports remote execution of built-in JDK tool commands: jstat, jstack, jinfo, jmap, jcmd, etc.
- Provides Three Service Modes
- jvmm service: Uses a proprietary RPC protocol and requires a remote connection through the jvmm client. Secure and reliable.
- http service: Provides HTTP interfaces for remote invocation without language restrictions.
- Sentinel service: Periodically collects data and reports it to subscribers.
- Supports transparent cross-process attachment to Java processes, remote connections, Java Agent startup, standalone server operation, and custom development
- Supports JDK 8+
- Supports Linux/Mac/Windows
5. Tech Stack
Quick Start
Please visit releases to download the latest version of jvmm, then extract it.
Quick Tip: Some Jvmm features depend on the local JDK environment. Make sure you have a JDK installed, not just a JRE. To quickly verify, run jps -l in your environment. If the command executes successfully and displays results, your environment is ready. Otherwise, errors may occur when running Jvmm.
First, execute the following command to generate the service JAR package.
java -jar jvmm.jar -m jar -s
Then start the server. Pay attention to your JDK version when starting it.
# Start the server. Use the following command for JDK 8 java -jar jvmm-server.jar # For JDK 9+, use the following command java -jar --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED --add-opens java.management/sun.management=ALL-UNNAMED jvmm-server.jar
If startup succeeds, Jvmm Server will run on port 5010 by default. Then open a new terminal window in the current directory and execute:
java -jar jvmm.jar -m client -a 127.0.0.1:5010
If the connection to the server succeeds, you will enter client mode. You can enter the following command to collect process data. You can also enter help to view the usage instructions for all executable commands in this mode.
info -t process
Here are sample data collected in Jvmm client mode. Jvmm offers far more features than these. For additional functionality, please refer to the Jvmm documentation.
Usage Document
Jvmm's core data collection features are provided by the core module, while its service-oriented features are provided by the server module. Depending on your use case, you can choose either of the following two approaches:
- Use Jvmm Server Directly
- Develop Further Based on the core Module (More Features)
Detailed content, please refer to README.md document.