JAVA(JDK)内存溢出分析工具(VISUALVM)

摘要:
结束阶段的前言:VisualVM:它是一个用于监视和显示本地或远程服务器JVM的工作状态以进行性能调整的工具。它可以监视JVM内存、CPU、垃圾收集器等的各个子池,以便发现程序代码中的潜在泄漏点和配置问题。简单的问题是,当我们编写业务时,可能会出现一些无法解释的问题,例如内存溢出。换句话说,内存的实际大小不符合当前执行的内存的大小,这会导致一些东西无法工作并导致崩溃。我如何使用它?

标签:操作类

前言

VisualVM:

它是一个以监控、显示本地或者远程服务器 JVM工作情况,进行性能调优的工具。可以实现对JVM内存各个子池、CPU、垃圾收集器等方面进行监控,从而发现程序代码中潜在的泄露点和配置问题。

问题浅出

我们在写业务时有时候可能会出现一些莫名其妙的问题,比如内存溢出,换而言之就是内存实际大小不满足于当前执行的内存大小,从而造成某些东西不工作导致崩溃

如何使用?

jdk一搬都携带该工具,位置在jdk安装目录的bin目录里面
例:

JAVA(JDK)内存溢出分析工具(VISUALVM)第1张

双击打开之后安装GC插件

JAVA(JDK)内存溢出分析工具(VISUALVM)第2张

紧接着打包你要进行监控的jar

启动jar时务必设置好JVM参数以及OOM内存溢出日志输出目录

  1. 打包用于监控的jar包

JAVA(JDK)内存溢出分析工具(VISUALVM)第3张

  1. 用jvm参数以及oom参数启动

说明(我这里是测试环境仅供参考)>
-Xms100m 启动时占用内存为100
-Xmx100m 最大支持内存占用为100
-XX:HeapDumpPath=D:\logs 如果出现内存溢出即输出日志到logs目录下,文件名默认也行,你自己设置也可以
-Dcom.sun.management.jmxremote.port=9999 模拟该jar包监控时远程调用接口,这里随便写一个不占用的端口即可
-Djava.rmi.server.hostname=192.168.0.108 当前主机IP
其它参数含义自行百度

java -Dserver.port=5555 
-Xms100m  
-Xmx100m 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=D:\logs 
-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=9999 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Djava.rmi.server.hostname=192.168.0.108 
-jar zuulServer.jar

启动完成之后图形界面查看如下

JAVA(JDK)内存溢出分析工具(VISUALVM)第4张

模拟内存溢出接口

JAVA(JDK)内存溢出分析工具(VISUALVM)第5张

访问该接口输出dump日志文件在D盘logs目录下
如图所示

JAVA(JDK)内存溢出分析工具(VISUALVM)第6张

使用Visual-GC打开该文件分析
流程:选择监控的jar点击装入然后选择目录筛选hprof选择日志文件打开

JAVA(JDK)内存溢出分析工具(VISUALVM)第7张

打开之后如下图所示

JAVA(JDK)内存溢出分析工具(VISUALVM)第8张

点击进入错误线程查看溢出问题
此处查看得知68行出的问题,由此可查出问题所在

JAVA(JDK)内存溢出分析工具(VISUALVM)第9张

收尾阶段

这个我也是刚刚使用,太多的东西不太熟悉,先总结一篇以后慢慢修正,先入门再说咯!!!

免责声明:文章转载自《JAVA(JDK)内存溢出分析工具(VISUALVM)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL server的高可用Apache Solr 全版本任意读取文件漏洞下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

编译JDK源代码【转】

用Eclipse Debug,当跟踪进jdk api里时(比如javax.swing包里的类),无法查看某些local filed的值。这是因为jdk里的代码在打包时删除了一些用于调试的信息,以减小安装包的体积。不过可以通过重新编译jdk源代码来恢复此功能。 1.在Eclipse里新建一个java工程,把jdk_home/src.zip解压缩,复制java...

再见,Java 8!Java 17 终于免费了,史上最快的 JDK。。

文 | 局长 出品 | OSC开源社区(ID:oschina2013) Java 17 已正式发布,新版本提供了不少新特性和功能增强。不过对于大多数项目而言,往往需要更改代码才能利用到这些新变化,但性能除外 —— 开发者只需要升级 JDK 版本,就能免费获得性能提升。 规划调度引擎 OptaPlanner 项目负责人对 JDK 17、JDK 16 和 JD...

JDK中的URLConnection参数详解

针对JDK中的URLConnection连接Servlet的问题,网上有虽然有所涉及,但是只是说明了某一个或几个问题,是以FAQ的方式来解决的,而且比较零散,现在对这个类的使用就本人在项目中的使用经验做如下总结:1:> URL请求的类别:分为二类,GET与POST请求。二者的区别在于:a:) get请求可以获取静态页面,也可以把参数放在URL字串后面...

Oracle安装

参考:https://blog.csdn.net/wudiyong22/article/details/78904361 一、Oracle下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可。 路径名称中,最好不要出现中文,也不要出现空格等不规则字符。百度云盘:https://pan.baidu.com/s/14cBI8mAro7r...

docker环境下Java获取cpu核心数不准确,实际上是宿主机的cpu核心数

docker环境下Java获取cpu核心数异常 一次查询线上BUG时,发现JDK获取cpu核心数不准确,导致程序运行过程中出现了不符合预期的情况,因为在线上docker环境的JDK代码中获取的cpu核心数实际上是docker宿主机的cpu核心数。 于是,网上搜索了一下,确实是存在这个情况的,这么说是因为在后来的jdk版本中,JDK增强了对docker的支持...

linux版本mat使用

1、下载linux版本的mat wget http://eclipse.stu.edu.tw/mat/1.9.0/rcp/MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip 2、解压zip包 unzip MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip 3...