JMAP转储大小为4.5 GB。Eclipse MAT显示总堆大小为415 MB,如何分析剩余的转储文件?

4

我正在使用Tomcat 6运行Web应用程序。我们使用open JDK 6。我们的服务器是AMD 64位Ubuntu 11.04。

通过以下命令进行内存转储

jmap -dump:format=b,file=/home/demon/Desktop/mymemorydump.hprof 2762

内存转储大小为4.5 GB。我们使用eclipse MAT进行分析时,强可达对象为80 MB,不可达对象为335 MB...如何分析剩下的内容...

此进程在我的服务器上占用的内存为4.5 GB。现在这个内存永远不会降到正常水平的1 GB。这个内存缓慢地增加到8-9 GB,然后我们的tomcat停止响应(实际上没有内存不足错误)。

我的tomcat配置是

/usr/lib/jvm/java-6-openjdk/bin/java -Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties -Djava.awt.headless=true -Xms1024m -Xmx6144m -XX:+UseConcMarkSweepGC -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/share/tomcat6/endorsed -classpath /usr/share/tomcat6/bin/bootstrap.jar -Dcatalina.base=/var/lib/tomcat6 -Dcatalina.home=/usr/share/tomcat6 -Djava.io.tmpdir=/tmp/tomcat6-tmp org.apache.catalina.startup.Bootstrap start
1个回答

2
您可能存在线程泄漏问题,即创建了过多的线程而这些线程从未终止。每个线程都会分配堆栈空间,上面没有显示。按Ctrl-\(Unix)或Ctrl-Break(Windows)将转储每个线程的堆栈跟踪(您可能需要重定向Tomcat的STDERR以避免它在终端上滚动)。如果您没有从终端启动Tomcat,则请使用“kill -QUIT YourPID”而不是Ctrl-。

此外,在执行文件停止响应之前,jconsole(在jdk bin目录中)可以附加到您的进程,它可能能够在事情失控之前显示线程(或堆)泄漏情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接