JVM
JVM架构

线上内存溢出问题排查
top命令
使用top命令查看机器内存占用情况,shift+m按内存排序
jstat命令
使用jstat工具,对指定java进程(20886就是进程id,通过ps -aux | grep java命令就能找到),按照指定间隔,看一下统计信息,这里会每隔一段时间显示一下,包括新生代的两个S0、s1区、Eden区,以及老年代的内存使用率,还有young gc以及full gc的次数。
jstat -gcutil 20886 1000 10
jmap命令
执行jmap -histo pid可以打印出当前堆中所有每个类的实例数量和内存占用
jmap -histo pid
jmap dump命令
把当前堆内存的快照转储到dumpfile_jmap.hprof文件中,然后可以对内存快照进行分析
jmap -dump:format=b,file=文件名 [pid]
线上jvm必须配置-XX:+HeapDumpOnOutOfMemoryError,-XX:HeapDumpPath=/path/heap/dump。因为这样就是说OOM的时候自动导出一份内存快照,你就可以分析发生OOM时的内存快照了,到底是哪里出现的问题。
最后更新于
这有帮助吗?