一款轻量的JVM监控工具——Jvmm

目录

  • 关于Jvmm
    • 功能支持
    • 下载地址
  • 快速上手
  • 监控功能
    • 查看操作系统基础信息
    • 查看操作系统CPU负载、内存使用情况、磁盘占用情况
    • 查看类加载统计
    • 查看类加载器实例信息
    • 查看编译统计信息
    • 查看垃圾收集器信息
    • 查看进程信息
    • 查看JVM内存信息
    • 查看JVM内存管理器
    • 查看JVM内存池
    • 查看线程情况
    • 查看线程堆栈
  • 生成火焰图
  • 反编译代码
  • 执行JVM Tools
  • 关闭Jvmm
  • 拓展使用

关于Jvmm

一款轻量的JVM监控工具——Jvmm_第1张图片

推荐一个轻量的Java虚拟机监控工具:Jvmm,开箱即用,支持丰富的功能

功能支持

  • 支持监控虚拟机gc统计信息、内存使用情况、内存池信息、类文件加载统计、线程堆栈
  • 支持监控物理机基础信息、内存使用情况、磁盘使用情况、cpu负载
  • 支持获取Java运行时启动参数、虚拟机参数、properties参数
  • 支持远程执行JDK自带工具,jps、jstat、jstack、jinfo、jmap、jcmd等
  • 支持生成火焰图(采样事件包括CPU、内存分配、线程栈、Java方法调用栈等)
  • 支持代码反编译生成
  • 支持代码热更新(可指定ClassLoader)
  • 支持远程执行GC
  • 提供客户端交互工具,支持跨进程attach和远程连接功能
  • 支持三种服务模式,足以应对大部分监控场景,可同时开启多个服务
    • jvmm服务:独有通信协议,需使用jvmm客户端远程连接调用
    • http服务:提供Http接口,不限语言远程调用
    • 哨兵:定时采集数据并上报给订阅者
  • 支持在自己项目中直接使用jvmm,只需引入server模块
  • 支持基于core模块进行二次开发
  • 支持 JDK 8+
  • 支持 Linux/Mac/Windows

Jvmm是一个轻量的JVM监控工具,提供有丰富的监控功能:查看JVM信息(Runtime、内存、CPU、线程、GC、ClassLoader等)以及OS信息(内存、磁盘等),可生成火焰图,代码热更,反编译,提供多种服务模式(http、哨兵等)。适合用于服务健康监控、线上调优、排查问题、性能测试等场景。

下载地址

  • github: https://github.com/tzfun/jvmm/releases/download/2.0.2/jvmm-2.0.2.zip

  • gitee: https://gitee.com/tzfun/jvmm/releases/download/2.0.2/jvmm-2.0.2.zip

项目地址:https://github.com/tzfun/jvmm

快速上手

直接运行

java -jar jvmm.jar

运行后会提示你进入什么模式,我们先将Jvmm attach到一个测试程序中,这里选择 2

一款轻量的JVM监控工具——Jvmm_第2张图片
接下来会询问你是否使用当前目录的配置文件,你可以选择否然后自己指定一个配置文件路径,这里我们先使用默认的配置,选择Y进入下一步

接下来会提示你选择目标进程,这里我们选择提前启动好的测试程序
一款轻量的JVM监控工具——Jvmm_第3张图片
最后attach成功之后会提示你它运行在了什么端口,看到这样的提示说明你已经成功的将Jvmm Attach到你的目标程序了,然后你就可以使用它的Client模式与你的程序通信
Attach Success
仍然是运行java -jar jvmm.jar进入模式选择,这一次我们选择1 client模式
一款轻量的JVM监控工具——Jvmm_第4张图片
接下来会提示你需要连接的Jvmm目标程序地址,前面我们attach的时候提示是运行在5010端口,这里就填127.0.0.1:5010

然后会提示你目标程序需不需要身份认证,因为默认配置文件里没有开启认证所以这里选择否直接连接,如果提示下面的信息说明你就成功连接上了你的程序。
在这里插入图片描述

剩下的就是使用它内置的命令进行查看监控数据或者执行一些操作

监控功能

> help info
info: -
Get information about the target server
 -f <output>   File path (optional), output info to file.
 -t <type>     Info type (required *), optional values: system, systemDynamic, classloading, classloader, compilation, gc,
               process, memory, memoryManager, memoryPool, thread, threadStack.

查看操作系统基础信息

一款轻量的JVM监控工具——Jvmm_第5张图片

查看操作系统CPU负载、内存使用情况、磁盘占用情况

一款轻量的JVM监控工具——Jvmm_第6张图片

查看类加载统计

一款轻量的JVM监控工具——Jvmm_第7张图片

查看类加载器实例信息

一款轻量的JVM监控工具——Jvmm_第8张图片

查看编译统计信息

一款轻量的JVM监控工具——Jvmm_第9张图片

查看垃圾收集器信息

一款轻量的JVM监控工具——Jvmm_第10张图片

查看进程信息

因为数据项太多就不进行展示了,主要是进程运行情况、参数以及环境变量等信息

info -t process

查看JVM内存信息

一款轻量的JVM监控工具——Jvmm_第11张图片

查看JVM内存管理器

一款轻量的JVM监控工具——Jvmm_第12张图片

查看JVM内存池

一款轻量的JVM监控工具——Jvmm_第13张图片

查看线程情况

一款轻量的JVM监控工具——Jvmm_第14张图片

查看线程堆栈

生成火焰图

在Linux和Mac环境下可以生成火焰图,支持较多的采样事件,也可以针对于Java方法调用栈进行采样跟踪,下面是使用方法

> help profiler

profiler: -
Get server sampling report. Only supported on MacOS and Linux.
 -c <counter>    Sample counter type, optional values: samples, total. Default value: samples.
 -e <event>      Sample event, optional values: cpu, alloc, lock, wall, itimer. Default value: cpu.
 -f <file>       Output file path, supported file type: html, txt, jfr. If not filled, will output text content
 -i <interval>   The time interval of the unit to collect samples, the unit is nanosecond. Default value: 10000000 ns.
 -t <time>       Sampling interval time, the unit is second. Default value: 10 s.

比如我直接执行profiler -t 2就可以针对于目标进程进行CPU样本采样2秒,并生成报告

不过一般为了方便查看,生成可视化的火焰图是更好的选择

profiler -t 5 -f flame_graph.html

执行后等待5秒就会生成这样一份火焰图报告
一款轻量的JVM监控工具——Jvmm_第15张图片
你可以选择不同的采样事件,下面给出一些示例:

wall 查看所有线程调用栈

profiler -e wall -t 5 -f flame_graph.html

一款轻量的JVM监控工具——Jvmm_第16张图片

alloc 查看内存分配

profiler -e alloc -t 5 -f flame_graph.html

查看方法调用栈

profiler -e java.net.ServerSocket.accept -t 10 -f flame_graph.html

在这里插入图片描述

反编译代码

使用Jvmm也可以反编译代码,帮助你在运行时查看源码

> help jad
You can use the following command in client mode.

jad: -
Shutdown service.
 -c <class>    Required, the java class to be decompiled
 -f <file>     Output file path
 -m <method>   Specify the method name in the decompiled class

一款轻量的JVM监控工具——Jvmm_第17张图片
你也可以指定某一个方法查看源码
一款轻量的JVM监控工具——Jvmm_第18张图片

执行JVM Tools

你可以远程执行JVM Tools,执行方法与原生调用几乎一样,只是通过Jvmm赋予了其远程调用的能力

一款轻量的JVM监控工具——Jvmm_第19张图片
一款轻量的JVM监控工具——Jvmm_第20张图片

关闭Jvmm

你可以通过Client工具关闭正在运行的Jvmm,改关闭操作只是针对于运行的Jvmm Server,并不会影响你的程序正常运行。
在这里插入图片描述

拓展使用

Jvmm的Client工具在平时的开发工作中足以满足大部分需求,它还提供了非常多的其他功能,例如Java Agent支持、Http Server服务、哨兵模式、Core API

更多使用方法后续持续更新,创作不易,觉得不错给个star~

你可能感兴趣的:(工具,JVM,监控工具,jvm,java,Jvmm,服务监控,监控工具)