Java VisualVM从tomcat获取HeapDump但Tomcat未在本地应用程序中列出

时间:2014-08-22 14:23:01

标签: java tomcat out-of-memory jvisualvm

我正在尝试诊断可能的内存泄漏问题。该应用程序表现得非常慢。只是通过增加permgen大小只会暂时解决问题。我想垃圾收集不需要的类加载器空间。所以,我需要获得一个tomcat服务器的堆转储。

这是我的tomcat日志中的问题:

Web应用程序[/]使用[org.codehaus.groovy.grails.orm.hibernate.support.HibernatePersistenceContextInterceptor $ 1]类型的键创建了一个ThreadLocal(值[org.codehaus.groovy.grails.orm.hibernate.support] .HibernatePersistenceContextInterceptor $ 1 @ 1dfd670])和类型[java.lang.Boolean](值[false])的值,但在Web应用程序停止时无法将其删除。这很可能会造成内存泄漏。

要将tomcat添加到Java visualvm中的应用程序,此问题中提到了一些步骤。

Java VisualVM does not show/list my tomcat java process

我应该在应用程序中添加这个?这是我在客户端服务器中部署的war文件。我现在无法创建新的war文件。

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=8484
-Dcom.sun.management.jmxremote.ssl=false

1 个答案:

答案 0 :(得分:0)

首先,您需要在服务器上启用它,看一下我为您拍摄的照片:

enter image description here

如果要在客户端上部署它,则必须通过JAVA_OPTS传递它。

Linux示例:

export JAVA_OPTS="-Detc etc..."

Windows示例:

set JAVA_OPTS="-Detc etc..."

在参数中,您需要添加以下内容:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=8484
-Dcom.sun.management.jmxremote.ssl=false

检查端口是否未被使用。

然后你需要配置你的JMX,这是官方教程,它很简单:http://visualvm.java.net/jmx_connections.html