java内存问题排查

发布时间 2023-07-10 19:43:42作者: 水煮鱼它不香吗

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

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