我正在尝试诊断可能的内存泄漏问题。该应用程序表现得非常慢。只是通过增加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
答案 0 :(得分:0)
首先,您需要在服务器上启用它,看一下我为您拍摄的照片:
如果要在客户端上部署它,则必须通过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