无法使用 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 集成

JVisualVM -Xverify:none 无法解决重定义失败,错误 62

jvisualvm的使用

如何使用jvisualvm进行cpu或内存抽样

jvisualvm_使用jmx连接远程linux应用

我无法设置我的 jndi.properties 来访问 Jboss 5 上的远程 EJB