JAVA项目性能分析工具JConsole的使用
项目启动参数增加以下选项即可:
-Djava.rmi.server.hostname=192.168.0.129 (服务所在IP) |
以某项目(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,可以在程序中去掉。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 叶落花开的博客!
评论