java内存问题排查

1. 查看进程

  输入:jps -v

  输出:1 jar -Xms2g -Xmx2g -XX:SurvivorRatio=4 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:MaxDirectMemorySize=256M -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08

  可以查看机器上的java进程,1 是进程ID,jar 是进程名称,后面是一些启动参数

 

2. 保存栈信息

  输入:jstack -l 1 >> /usr/local/1-jstack.txt

  输出:1-jstack.txt

  可以查看ID为 1 的进程的堆栈快照(如下图)。可以看到所有线程的名称和状态,可以看出是否有死锁。  

        

 

3. 输出dump文件

  输入:jmap -F -dump:live,format=b,file=/usr/local/1-dump.bin 1

  输出:1-dump.bin

  会将jvm的堆内存信息保存到二进制dump文件中。可以使用MAT 工具打开dump文件,分析内存情况。

 

4. 简单输出类对象占用内存大小排序(按占用内存从大到小)

  输入:jmap -histo 1 >> ./1-histo.txt

  输出:1-histo.txt

  按类对象占用内存空间总量从到大小的排序,还包括实例数,如下图:

        

 

5. 查看堆内存配额及使用率

  输入:jmap -heap 1

  输出:各个内存区域的配额和使用率

        

 

6. 本地实时监控

  本地模拟重现的时候,可以使用jdk工具 jvisualvm,实时查看cpu使用率、内存使用量和使用率、线程数量等趋势。如下图:

        

  下载 Visual GC 插件 还可以查看内存各个区域的使用情况和垃圾回收次数,如下图:

        

 

  jvisualvm 安装插件的方法:https://blog.csdn.net/weixin_40920359/article/details/127348867

 

posted @ 2023-07-10 19:35  不爱刺猫的鱼  阅读(84)  评论(0编辑  收藏  举报