由于服务器上部署的Web应用程序生成了OutOfMemoryError,我试图从Weblogic 10.3.6生成完整的堆转储。
我已经设置了以下启动脚本:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump
发生OutOfMemoryError时,Weblogic在/path/to/heapdump
文件夹中生成一个空的hprof文件(大小为0字节),但没有任何反应:即使无法访问服务器也仍处于RUNNING模式不再。
Java进程仍然存在,但是处理器的使用率为0%。
即使server.out日志似乎完全冻结,也没有任何OutOfMemoryError的痕迹。
配置出了什么问题?
答案 0 :(得分:1)
可能您可以使用Java Flight Recorder来保存事件并检查哪些对象正在生成OOM。
(任何探查器也应该工作)。
答案 1 :(得分:0)
在那儿:(。我记得当时我们发现它有点合逻辑,因为没有足够的内存来进行正常操作,JVM也无法自动找到足够的内存来创建堆转储。如果内存为我服务好吧,当时我们做了两件事来调试内存泄漏:首先,我们很“幸运”,使得问题定期发生,因此可以进行密切的手动监视(监视gc.log以查找重复的FullGC和监视控制台中的“性能”选项卡。)知道问题何时开始,我们正在执行kill -3来手动获取转储。我们还幸运地使用了jstack {PID}(在Linux上为JDK 1.6)。当时,开发人员能够识别内存泄漏。希望能有所帮助。
答案 2 :(得分:0)
好的,您的配置看起来还不错。.您可能想检查weblogic进程用户是否有权编辑堆转储文件。
您可以使用Java工具进行堆转储: JAVA_HOME / bin / jmap -dump:format = b,file = the_file的路径
OR
%JROCKIT_HOME%\ bin \ jrcmd hprofdump filename =文件的路径