Weblogic 堆转储分析需要您的关注

Weblogic 堆转储分析需要您的关注,weblogic,heap,Weblogic,Heap,我有一个weblogic服务器,它在启动时抛出OOM错误。因此,我的应用程序运行不正常 我收集了Heap dump[下面的快照],但是,我不善于理解输出 你能帮助我理解为什么我会收到OOM错误吗? 下面是JVM参数 Starting WLS with line: /java -server -Xms1536m -Xmx1536m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:NewSize=512m -XX:MaxNewSize=512m -XX

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

我收集了Heap dump[下面的快照],但是,我不善于理解输出

你能帮助我理解为什么我会收到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
>java.lang.OutOfMemoryError:java堆空间将堆转储到
>java_pid16660.hprof。。。
>115.814:[GC[1厘米初始标记:743854K(1048576K)]743854K(1507328K),0.0050472秒]
>115.819:[CMS并发标记开始]已创建堆转储文件[3.935秒内778142756字节]
>根据java.lang.OutOfMemoryError计划请求:java堆
>space java.lang.OutOfMemoryError:java堆空间
>>至java.lang.ArrayIndexOutOfBoundsExcept:26214404
>java.lang.ArrayIndexOutOfBoundsException:26214404
>在weblogic.work.CalendarQueue.add(CalendarQueue.java:39)中
>在weblogic.work.RequestManager.addToPriorityQueue(RequestManager.java:263)上
>在weblogic.work.RequestManager.executeIt(RequestManager.java:235)
>位于weblogic.work.ServerWorkManagerImpl.schedule(ServerWorkManagerImpl.java:142)
>位于weblogic.corba.cos.transactions.RecoveryRegistrar.run(RecoveryRegistrar.java:47)
>截断的。有关完整的堆栈跟踪,请参阅日志文件

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


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

由于我更熟悉Eclipse内存分析器工具,我将回答如何通过Eclipse MAT工具分析HPROF文件

在eclipse中打开HPROF文件并完成解析后,如果原因更简单或更明显(对MAT而言),它将指向“泄漏嫌疑犯报告”中的罪犯线程/web请求

如果你没有那么幸运,那么就这样做:

  • 点击直方图选项
  • 基于右侧保留堆字段的排序表
  • 直方图视图显示占用内存的活动对象表,通常为低级别
    类,如HashMaps、List等
  • 您的目标是从这些顶级消费者到类,在树上找到类 您认识到它是您的应用程序代码的一部分,它的发起人也是
    记忆被吞噬了。如果它是一个web应用程序,您可能会获得特定的用户HTTP请求 这就是一切的开始
  • 选择顶级类名并右键单击选择“到GC根的最短路径->排除” 虚幻的、软的、弱的引用”
  • 生成的表列出了启动该应用程序的顶级Java类或Http请求 负责内存中断的线程。此列表为您提供了较窄的字段 你可以分析是什么导致它行为不端

  • 注意:MAT本身非常占用内存,因此要解析大小为b/w 5-8 GB的HPROF文件,您需要至少8 GB的RAM,还需要通过文件设置MAT工具的初始化参数:MemoryAnalyzer.ini特别是Xmx参数,比如-Xmx6144m

    我没有权限在JVM上执行任何操作,我能得到的只是堆转储,不管你想以什么方式看到它。我已经附加了错误,请让我知道这是否有帮助?让有权访问服务器的人安装它并为您运行。不,我帮不了你。通过
    Eclipse内存分析器工具运行HPROF堆转储,然后查找
    “泄漏嫌疑犯”
    报告-通常是最好的开始位置。