JAVA项目性能分析工具JConsole的使用

2020/11/27 16:22
阅读数 166

项目启动参数增加以下选项即可:

-Djava.rmi.server.hostname=192.168.0.129 (服务所在IP)

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=9192 (JConsole要连接的端口,不能与项目一样)

-Dcom.sun.management.jmxremote.rmi.port=9193 (rmi方式连接,不能与项目一样)

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false

 

以某项目(192.168.0.129,jar文件)为例,启动命令如下:

nohup java -jar -Djava.rmi.server.hostname=192.168.0.129 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9192 -Dcom.sun.management.jmxremote.rmi.port=9193 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false test-1.0.0.jar &

 

然后启动%JAVA_HOME%/bin/jconsole.exe,输入进程ip和端口,点击连接即可。

 

进程实际情况如下,使用情况:

 

 

通过观察发现一次次的堆内存使用量有较大幅度的变化,多次进行GC。

进一步分析堆内存情况。

 

 

每次经过GC之后老年区一直都在提升,说明对象在进行GC后被移动到老年区了。

 

 

Eden新生区,对象随着时间的变化生成的速度越来越快,GC不断进行回收操作,系统频繁调用GC。

 

 

存活期对象,在不断的进行GC操作之后,将被不断的从eden区copy到survive区,通过经过不多gc回收标记,在14:57时被批量移动到old区,所以空间在不断下降。

 

 

而非堆区数据一致保持较平稳状况,所以内存较为平稳。

 

 通过分析发现,堆区对象在不断生成,并且不断增加,即使在进行回收的时候也无法回收掉,可以理解为,此处有与不断产生 斐波那契 序列并存储出现的问题,由于后续的数据非常大,所以非必须应该放弃缓存,或在获得结果后进行转存,如数据库等。

 

另外,我们可以查看线程情况,通过下图可以查看main方法中的Thread.sleep();方法话费了2638,可以在程序中去掉。

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部