Java:手工触发FullGC及堆占用过高常用分析方法

发布时间:2024年01月10日

目录

一、手工触发FullGC方式

1、通过代码

2、通过工具

二、堆占用过高常用分析方法

1、查看堆占用情况

2、手工触发FullGC

3、查看对象占用堆的情况

4、分析可疑对象


使用如下命令查看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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。