参考文章:https://www.cnblogs.com/c-xiaohai/p/12489336.html
top命令显示的结果列表中,会看到%MEM这一列,这里可以看到你的进程可能对内存的使用率特别高。以查看正在运行的进程和系统负载信息,包括cpu负载、内存使用、各个进程所占系统资源
使用jstat命令: jstat -gcutil 20886 1000 10
每隔一段时间显示一下,包括新生代的两个S0、s1区、Eden区,以及老年代的内存使用率,还有young gc以及full gc的次数
使用jmap命令查看 jmap -histo pid
把当前堆内存的快照转储到dumpfile_jmap.hprof文件中,然后可以对内存快照进行分析
另外,务必提到,线上jvm必须配置-XX:+HeapDumpOnOutOfMemoryError,-XX:HeapDumpPath=/path/heap/dump。因为这样就是说OOM的时候自动导出一份内存快照,你就可以分析发生OOM时的内存快照了,到底是哪里出现的问题。