堆转储分析需要您的注意力

时间:2013-01-21 12:30:41

标签: weblogic heap

我有一个weblogic服务器,它在启动时会抛出OOM错误。因为我的应用程序行为不正常。

我收集了Heap dump [Snap Shot],但是,我不擅长理解输出。

Image Snap: http://img51.imageshack.us/img51/7470/heapanalysis.jpg

请帮助理解为什么我会收到OOM错误?  以下是JVM参数。

 Starting WLS with line:
 /java -server   -Xms1536m -Xmx1536m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:SurvivorRatio=6 -Xnoclassgc -XX:+DisableExplicitGC -verbose:gc -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError   

以下是日志中显示的错误。

> java.lang.OutOfMemoryError: Java heap space Dumping heap to
> java_pid16660.hprof ...
> 115.814: [GC [1 CMS-initial-mark: 743854K(1048576K)] 743854K(1507328K), 0.0050472 secs]
> 115.819: [CMS-concurrent-mark-start] Heap dump file created [778142756 bytes in 3.935 secs] <Jan 20, 2013 10:56:05 PM PST> <Critical>
> <WorkManager> <BEA-002911> <WorkManager weblogic.kernel.System failed
> to schedule a request due to java.lang.OutOfMemoryError: Java heap 
> space java.lang.OutOfMemoryError: Java heap space
> > <Jan 20, 2013 10:56:05 PM PST> <Critical> <WorkManager> <BEA-002911> <WorkManager weblogic.kernel.System failed to schedule a request due
> to java.lang.ArrayIndexOutOfBoundsExcept ion: 26214404
> java.lang.ArrayIndexOutOfBoundsException: 26214404
>         at weblogic.work.CalendarQueue.add(CalendarQueue.java:39)
>         at weblogic.work.RequestManager.addToPriorityQueue(RequestManager.java:263)
>         at weblogic.work.RequestManager.executeIt(RequestManager.java:235)
>         at weblogic.work.ServerWorkManagerImpl.schedule(ServerWorkManagerImpl.java:142)
>         at weblogic.corba.cos.transactions.RecoveryRegistrar.run(RecoveryRegistrar.java:47)
>         Truncated. see log file for complete stacktrace

2 个答案:

答案 0 :(得分:0)

我建议您下载Visual VM,安装所有插件,并在运行WebLogic时将其附加到PID。

您的HPROF难以阅读,但如果这些是字节,我在这里看不到问题。

答案 1 :(得分:0)

由于我更熟悉Eclipse Memory Analyzer工具,我将回答如何通过Eclipse MAT工具分析HPROF文件。

一旦你在eclipse中打开HPROF文件并完成解析,如果原因更简单或更明显(对于MAT),它将指向&#34;中的罪魁祸首线程/ web请求。泄漏嫌疑人报告&#34;。

如果你不是那么幸运,那就这样做:

  1. 点击直方图选项
  2. 根据右侧的“保留堆”字段对表进行排序
  3. 直方图视图显示消耗内存的活动对象表,通常为低级别     类似HashMaps,Lists等。
  4. 你的目标是从这些顶级消费者中找到树上的课程,直至上课     您认可的是您的应用程序代码的一部分,因此是发起人     记忆猪。如果它是一个Web应用程序,您可能会获得特定的用户HTTP请求     这开始了。
  5. 选择顶级班级名称并右键单击选择&#34; GC根源的最短路径 - &gt;排除     幽灵,柔软,弱引用&#34;。
  6. 结果表列出了启动的顶级Java类或Http请求     线程负责内存中断。此列表为您提供较窄的字段     你可以分析导致它行为不端的原因。
  7. 注意: MAT本身就是内存密集型,所以对于解析大小为b / w 5-8 GB的HPROF文件,你需要至少8 GB RAM并设置MAT工具的初始化参数通过文件: MemoryAnalyzer.ini 特别是Xmx param,比如-Xmx6144m