龙空技术网

JVM内存溢出常用排查命令

FXF 288

前言:

现时姐妹们对“数据库数据溢出的排查方案”可能比较关心,兄弟们都需要知道一些“数据库数据溢出的排查方案”的相关知识。那么小编在网摘上汇集了一些有关“数据库数据溢出的排查方案””的相关资讯,希望兄弟们能喜欢,你们快快来学习一下吧!

最近,有一个项目在不超过的12小时内,一定会内存溢出(java.lang.OutOfMemoryError:Java heap space)。由于当时比较忙,没有时间去具体分析,所以暂时只是加大了JVM的参数,最小和最大堆内存都设置成1024m(-Xms1024m -Xmx1024m),可是,效果并不好,同样坚持不到一天,又是内存溢出。所以可以判断,肯定是代码写的有问题,哪里的对象没有释放。

jmap:Java内存映像工具

jmap(Memory Map for Java)命令可以生成堆转储快照,也可以显示Java堆详细信息。下面列举两个常用的命令:

1.jmap -dump:live,format=b,file=文件名.hprof [pid]

解释:此命令用于生成堆转储快照

live说明dump出存活的对象

[pid]是java进程id

2.jmap -heap [pid]

解释:此命令显示Java堆详细信息,如使用哪种回收器、参数配置、分代情况等。

jstack:Java堆栈跟踪工具

jstack( Stack Trace for Java) 命令可以生成虚拟机当前时刻的线程快照 。

1.jstack -l [pid] >> 文件名.txt

解释:将线程转储到指定的文件。此文件包含虚拟机内每一条线程正在执行的方法,可以查看是否发生死锁,死循环等问题。

jstat: 虚拟机统计信息监视工具

jstat( JVM Statistics Monitoring Tool) 可以监视虚拟机各种运行状态信息的命令行工具。

1.jstat -gcutil [pid]

解释:监视Java 堆的情况,包括Eden区、2个Survior区、老年代、永久代等已使用空间占总空间的百分比和垃圾收集时间合计

上图解释: 当前java程序的新生代Eden区(E, 表示Eden) 使用了87.14%的空间, 2个Survivor区(S0、 S1, 表示Survivor0、 Survivor1),其中Survivor1使用了75.00%的空间, 老年代(O, 表示Old) 和永久代(P, 表示 Permanent) 则分别使用了53.47%和38.73%的空间。 程序运行以来共发生Minor GC(YGC, 表示Young GC) 727981次, 总耗时6817.293秒; 发生Full GC(FGC, 表示Full GC)1316次, 总耗时(FGCT, 表示Full GC

Time) 为173.784秒; 所有GC总耗时(GCT, 表示GC Time) 为6991.077秒。

总结

通过以上命令,很好的帮我定位到了问题所在,当然堆转储后的文件为二进制文件,还需要通过其他工具进行分析查看,这里使用的是JProfile。

希望以上内容可以对你有所帮助,喜欢的话,点个赞支持一下!

标签: #数据库数据溢出的排查方案 #数据库数据溢出的排查方案是什么 #jvm的内存映像 #jvm内存不释放