首页 > 基础资料 博客日记
Java:手工触发FullGC及堆占用过高常用分析方法
2024-05-29 18:00:05基础资料围观220次
本篇文章分享Java:手工触发FullGC及堆占用过高常用分析方法,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识
目录
使用如下命令查看java进程中内存的使用情况
jstat -gcutil <pid> 5000
发现运行中的java进程堆内存占用一直过高,有可能是堆中有大量无用对象没有释放,可以先触发一次FullGC,查看一下结果。
一、手工触发FullGC方式
触发FullGC可以通过代码,也可以通过工具,下面简单介绍一下主要的方式
1、通过代码
#1
System.gc();
#2
Runtime.getRuntime().gc();
2、通过工具
#1 jmap
jmap -histo:live <pid>
此命令会先执行一次FullGC,然后把存活类的对象的数量和占用的空间,按从大到小的顺序排列出来。
#2 jcmd
jcmd <pid> GC.run
#3 使用JConsole或 Java Mission Control
这2个工具实际上也是执行的jcmdGC.run命令。
通过代码触发的方式需要写代码,用起来不方便,推荐使用工具的方式。
二、堆占用过高常用分析方法
总结一下,对于堆占用过高的问题,最简单的处理步骤如下:
1、查看堆占用情况
先通过如下命令查看java进程的堆占用情况
jstat -gcutil <pid> 5000
2、手工触发FullGC
通过如下命令手工触发FullGC,主要是将无用的对象都回收掉,将占用的空间释放出来
jcmd <pid> GC.run
3、查看对象占用堆的情况
若堆占用还是较高,使用如下命令查看是哪些类的对象占用堆较高
jmap -histo:live <pid>
4、分析可疑对象
分析上述命令导出的日志文件,找出占用内存空间较多的类的对象,结合代码进行分析。
文章来源:https://blog.csdn.net/netyeaxi/article/details/135496876
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: