无法使用 jvisualvm 分析 JBoss 5
Posted
技术标签:
【中文标题】无法使用 jvisualvm 分析 JBoss 5【英文标题】:Unable to profile JBoss 5 using jvisualvm 【发布时间】:2011-01-11 17:07:33 【问题描述】:我在夜间运行我的 Java 应用程序时遇到了一些 java.lang.OutOfMemoryError: GC overhead limit exceeded
错误:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid6376.hprof ...
Heap dump file created [512149941 bytes in 23.586 secs]
23:34:52,163 WARN [HDScanner] Scan failed
java.lang.OutOfMemoryError: Java heap space
23:34:52,298 ERROR [ContainerBase] Exception invoking periodic operation:
java.lang.OutOfMemoryError: Java heap space
23:34:52,321 ERROR [JIoEndpoint] Socket accept failed
java.lang.OutOfMemoryError: Java heap space
at java.net.ServerSocket.accept(Unknown Source)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:310)
如果我打开jvisualvm,我可以看到我确实堆空间不足:
我想对其进行分析以试图弄清楚发生了什么 - 是否存在内存泄漏? 等等。但是,我无法让 jvisualvm 分析器执行任何操作. Profiler
选项卡显示有关启用类共享的警告:
...即使我已将 -Xshare:off
flag 添加到我的 VM 参数中:
所以,
关于如何使分析工作的任何想法? 是否值得使用G1GC
而不是......我目前使用的任何 GC?
【问题讨论】:
【参考方案1】:在我看来,您正在 32 位 JVM 上运行 VisualVM,而您的 JBoss 正在 64 位 JVM 上运行。在这种情况下,探查器和其他诸如线程和 CPU 监控之类的东西在 Windows 上无法开箱即用。使用探查器时,您会遇到错误#273,其中探查器未正确启用。您应该执行以下操作:
-
下载最新的 64 位 JDK(当前为 JDK 6u23)。它还包含最新版本的 Java VisualVM
在 VisualVM 中使用内存采样器(它的开销比分析低得多)来查看是否可以发现问题。
如果这没有帮助,请查看堆转储并尝试找出发生了什么。
对您的 JBoss 服务器进行内存分析。有关 VisualVM 中的探查器的更多信息,请参阅 Profiling With VisualVM, Part 1 和 Profiling With VisualVM, Part 2。
【讨论】:
我认为你是对的。我的机器上有 32 位和 64 位 JDK,看起来我一直在运行 32 位 JDK 的 VisualVM。现在我只需要时间再玩一遍......以上是关于无法使用 jvisualvm 分析 JBoss 5的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Jvisual Vm 与 Jboss EAP 6.1 集成