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