几款JVM图形化监控工具
前言
几款JVM的图形化监控工具介绍,这类工具作用大同小异,看需求选择适合自己的。
JConsole
JConsole是JDK自带的一款监控工具,可以通过JMX(Java管理扩展)技术监控Java应用程序的性能数据。可以通过远程连接或在本地进行监控,提供了图形化的界面展示。
可以查看java应用程序的运行概况、监控堆信息、永久区使用情况、类加载情况等。
在命令行输入
jconsole
即可打开。可以直接选择本地JVM,也可以通过JMX方式连接远程JVM
堆内存使用量:展示Java内存模型中的堆
线程:展示JVM中活动线程的数量
类:JVM 一共加载了多少个类
CPU占用率:CPU使用率反馈系统负载和压力
提供展示统计了6个内存区域的内存使用和变化情况
还有各个内存池的百分比使用率,以及堆/非堆空间的汇总使用情况
还可以看到JVM使用的垃圾收集器,以及执行垃圾收集的次数,以及相应的时间消耗
线程面板展示了线程数变化信息,以及监测到的线程列表
可以根据名称直接查看线程的状态和调用栈
还可以直接点击“检测死锁”按钮来检测死锁,如果没有死锁则会提示“未检测到死锁”
4.类
可以直接看到 JVM 加载和卸载的类数量汇总信息,以及随着时间的动态变化情况
VM概要的数据有五个部分:
1.虚拟机的信息
2.线程数量,以及类加载的汇总信息
3.堆内存和 GC 统计
4.操作系统和宿主机的设备信息,比如CPU 数量、物理内存、虚拟内存等等
5.JVM启动参数和几个关键路径
VisualVM
VisualVM是JDK自带的一款工具,可以用于监控Java应用程序的CPU、内存和线程等方面的性能数据。它可以在本地或远程监控,并提供了图形化的界面展示。
VisualVM使用简单,几乎0配置,功能还是比较丰富的,几乎囊括了其它JDK自带命令的所有功能。
概览
在命令行输入
jvisualvm
即可启动jvisualvm
在jdk的安装目录的bin目录下,找到jvisualvm.exe,双击即可打开
分为本地JVM进程与远程JVM进程,这里选择本地JVM进程,双击某个进程即可打开
查看CPU、内存、类、线程运行信息
监视面板
线程面板
可以点击右上角Dump按钮,将线程的信息导出,其实就是执行的jstack命令
运行:正在运行的
休眠:sleep
等待:wait
驻留:线程池里面的空闲线程
监视:阻塞的线程,正在等待锁
抽样器面板
抽样器可以对CPU、内存在一段时间内进行抽样,以供分析
插件安装
支持插件功能,Visual GC插件下载地址:https://visualvm.github.io/pluginscenters.html
在工具栏安装插件
若获取可用插件异常,访问:https://visualvm.github.io/pluginscenters.html
,找到对应版本范围,包含安装JDK版本的链接
复制如下查询出来的链接
并在设置中添加
Visual GC
安装Visual GC,该插件能直观的观察到整个垃圾回收的过程
安装后重启进入,任意监测一个java进程,非常直观的表示了垃圾回收过程
VisualGC
VisualGC是一款插件,在IDEA插件中下载即可。
双击某个进程进入
监控界面
jmc
JDK8好像需要单独下载,因为在JDK7的bin目录发现了jmc,然而JDK8没有。
在命令行输入
jmc
即可打开
选择某个进程
监控界面
JHSDB工具
JHSDB是一款基于服务性代理实现的进程外调试工具。服务性代理是 HotSpot 虚拟机中一组用于映射 Java 虚拟机运行信息的,主要基于 Java 语言实现的API 集合。
开启HSDB
启动JHSDB时必须将sawindbg.dll复制到对应目录的jre目录下,此Jre目录是指:通常Windos上安装JDK1.8后会在JDK安装同级目录有一个jre的目录
例如:在JDK的目录下,如:
D:\Development\Java\jdk8\jre\bin\sawindbg.dll
,将其复制到Jre目录,如:D:\Development\Java\jre8\bin\sawindbg.dll
启动HSDB
在JDK的lib目录下执行命令
D:\Development\Java\jdk8\lib>java -cp ./sa-jdi.jar sun.jvm.hotspot.HSDB
若未执行开启配置,则出现以下异常:
D:\Development\Java\jdk8\lib>java -cp ./sa-jdi.jar sun.jvm.hotspot.HSDB
Exception in thread "Thread-1" java.lang.UnsatisfiedLinkError: Can't load library: D:\Development\Java\jre8\bin\sawindbg.dll
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.<clinit>(WindbgDebuggerLocal.java:661)
at sun.jvm.hotspot.HotSpotAgent.setupDebuggerWin32(HotSpotAgent.java:567)
at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:335)
at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304)
at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140)
at sun.jvm.hotspot.HSDB.attach(HSDB.java:1184)
at sun.jvm.hotspot.HSDB.access$1700(HSDB.java:53)
at sun.jvm.hotspot.HSDB$25$1.run(HSDB.java:456)
at sun.jvm.hotspot.utilities.WorkerThread$MainLoop.run(WorkerThread.java:66)
at java.lang.Thread.run(Unknown Source)
D:\Development\Java\jdk8\lib>
使用jps命令查找对应程序的进程ID
PS D:\> jps
23000 Jps
25064 Bootstrap
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136948.html