参考:https://blog.csdn.net/weixin_43122090/article/details/105093777
JVM可视化工具
8.1为什么要可视化工具
开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。
8.2 visualVm
VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。
他作为Oracle JDK 的一部分,位于 JDK 根目录的 bin 文件夹下。VisualVM 自身要在 JDK6 以上的版本上运行,但是它能够监控 JDK1.4 以上版本的应用程序
8.2.1 打开visualVm
位于 JDK 根目录的 bin 文件夹下的jvisualvm.exe
注:我的JDK11没有,不知道为什么,我jdk8就找的到此工具,只有jdk8才带有可视化工具
先打开visualVM后再运行服务才能检测到!
选择你要监视的那个服务:双击
(hotSopt)
点击对应的服务名就能看到该虚拟机的情况:
要看线程和堆的dump:就右键该服务名
参考:https://blog.csdn.net/weixin_38526093/article/details/130655468
选择堆dump或者线程dump
出现无法为以下项生成堆dump时:
是由于没有以管理员权限启动jvisualvm.exe
重新使用管理员权限启动就可以了:
配置项配置相关参数
在jdk包下创建一个文件夹放dump生成的文件
添加配置项:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=D:\jdk8\jump\heapdump.hprof
idea中配置启动参数(也可以直接在jdk配置文件中添加永久参数):
jmap命令生成堆dump:
使用命令直接生成,参考:https://blog.csdn.net/u014454538/article/details/120370239
jmap命令产生dump文件
jmap -dump:format=b,file=file_name <pid>
注意这里一定要用管理员的身份运行该命令
jmap -dump:format=b,file=java_pid36.hprof 1504
然后将产生的dump文件导入分析软件里面分析:
二种方法是生成.bin文件
,然后用jhat命令,直接在网页上分析,参考:
https://blog.51cto.com/u_16175440/7181958
jmap -dump:format=b,file=java_pid36.bin 1504
jhat -port 9998 java_pid36.bin
访问浏览器:
http://127.0.0.1:9998/
工具 -> 插件 -> 安装Visual GC插件
工具 -> 插件 -> 安装Visual GC插件
重启就能看见visual GC了
jconsole
从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。
8.3.1 启动JConsole
点击jdk/bin 目录下面的jconsole.exe 即可启动,然后会自动自动搜索本机运行的所有虚拟机进程。选择其中一个进程可开始进行监控