JVM内存溢出常用排查命令

createh54个月前 (01-10)技术教程49

最近,有一个项目在不超过的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。

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

相关文章

「Java后端」开发环境搭建指南

1. Java1.1 Java安装及配置统一使用Oracle Java,版本为1.8,安装完成后配置环境变量JAVA_HOME及PATH。在命令行执行java -version应显示正确版本号。2....

JVM常用指令

目录:一.引言二.基础故障处理工具2.1 概述2.2. jps:虚拟机进程状况工具2.3. jstat:虚拟机统计信息监视工具2.3. jinfo:java配置信息工具2.5. jmap:Java...

CI&CD落地实践9-Sonar Scanner使用配置&SonarQube项目命令行接入

前言在前面一篇《代码质量扫描工具SonarQube原理及环境搭建》中,我们介绍了Sonarqube的架构组成、工作原理以及环境搭建相关操作。本篇将会重点介绍:Sonar Scanner的使用配置;利用...

音视频处理工具FFmpeg与Java结合的简单使用

一、什么是FFmpegFFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进...

拯救Java应用:Arthas监控术,让你事半功倍

背景想象一下,您的Java应用突然出现性能问题,用户投诉不断,而您却无法快速定位问题所在。传统的监控工具只提供了有限的信息,真正的故障元凶似乎总是遥不可及。现在,让我们揭开Arthas的神秘面纱——这...

「JAVA基础探针技术」Java探针-Java Agent技术

1、原理:基于javaAgent和Java字节码注入技术的java探针工具技术原理2、原理分析动态代理功能实现说明,我们利用javaAgent和ASM字节码技术开发java探针工具,实现原理如下:jd...