悲催的前个星期,生产环境的Weblogic连续两次OOM(OutofMemory)后宕机,不得不在礼拜日回去看log分析问题。
但是由于内存参数没有配置GC参数,没能生成当时宕机前的HeapDump文件。所以还是要配置上GC参数才能在下次查出问题根本。
配置内存参数方法,没找到在Weblogic console那里直接可以配置内存参数的方法,只能直接在bea/user_projects/domains/domain/bin/setDomainEnv.sh上增加
“-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpOnCtrlBreak -Xloggc:$$.gc.log”
配置如下:
-XX:+PrintGCDetails: 用来跟踪系统GC的详细情况;
-Xloggc:$$.gc.log: 将每次GC事件的相关情况记录到一个文件中。
-XX:+PrintGCTimeStamps: 可与-XX:+PrintGC -XX:+PrintGCDetails混合使用输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
-XX:+HeapDumpOnOutOfMemoryError: JVM在出现OOM异常的时候Dump出内存映像文件
-XX:+HeapDumpOnCtrlBreak: 表示可以通过kill -3 <pid>根据需要产生DUMP文件
但注意:
Oracle JVM的6.0版本去掉了-XX:+HeapDumpOnCtrlBreak参数,如果需要产生DUMP文件,请采用jmap命令,命令行格式如下:
jmap -dump:format=b,file=managed1_heapdump.hprof <pid>
其中managed1_heapdump.hprof表示生成的DUMP文件名称,pid表示Java进程号。
###############################################################################
产生的.hprof文件使用HeapAnalyzer工具,HeapAnalyzer是一款针对IBM JDK的内存文本镜像HeapDump的分析工具。