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

问题描述:

我有一个weblogic服务器在启动时会引发OOM错误。因为我的应用程序不能正常工作。堆转储分析需要您的注意力

我收集了堆转储[Snap Shot below],但是,我不擅长理解输出。

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 
+1

通过'Eclipse Memory Analyzer Tool'运行你的HPROF堆转储 - 并寻找''Leak Suspect''报告 - 通常是开始的最佳地点。 – JoseK

我建议你下载Visual VM,安装的所有插件,并将其连接到PID当您运行的WebLogic。

您的HPROF很难读取,但如果这些是字节,我在这里没有看到问题。

+0

我无法在JVM上执行任何操作,只要您希望看到它,我所能得到的就是堆转储。我附上了错误,请让我知道这是否有帮助? – shifahim

+0

获取有权访问服务器的人来安装并运行。不,我无法帮助你。 – duffymo

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

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

如果你没有那么幸运了,然后做到这一点:

  1. 点击直方图选项
  2. 排序表基础上保留堆场右侧
  3. 直方图视图显示内存中的活动对象的表消耗,通常是低水平
    类如HashMaps,列表等
  4. 您的目标是找到从这些顶级消费者树类,直到您认识到的类 你的应用程序代码的一部分,以及
    内存猪的发起者也是如此。如果它是一个网络应用程序,你可能会得到特定用户的HTTP请求 ,它启动它。
  5. 选择顶级的类名并右键单击选择“GC根的最短路径 - >不包括 幻影,软,弱引用”。
  6. 生成的表列出了启动负责内存中断的 线程的顶级Java类或Http请求。此列表可让您从 中缩小字段,您可以分析是什么导致其行为异常。

注: MAT是非常内存密集型本身,所以解析大小的HPROF文件B/W 5-8 GB,则需要通过ATLEAST 8 GB RAM和MAT工具还设置初始化参数文件:MemoryAnalyzer.ini特别是Xmx参数,比如说-Xmx6144m