Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将jmap/jhat输出跟踪回代码中导致PermGen OutOfMemory错误的行?_Java_Jboss_Out Of Memory_Permgen_Jhat - Fatal编程技术网

Java 如何将jmap/jhat输出跟踪回代码中导致PermGen OutOfMemory错误的行?

Java 如何将jmap/jhat输出跟踪回代码中导致PermGen OutOfMemory错误的行?,java,jboss,out-of-memory,permgen,jhat,Java,Jboss,Out Of Memory,Permgen,Jhat,我正在使用JBoss7.1.3、JDK1.6和Mac10.9.1。在使用Maven Jboss作为插件多次部署/取消部署我的WAR文件后,我的服务器因以下错误而死亡 15:05:10,120 ERROR [org.xnio.listener] (Remoting "daves-macbook-pro:MANAGEMENT" read-1) A channel event listener threw an exception: java.lang.OutOfMemoryError: PermGe

我正在使用JBoss7.1.3、JDK1.6和Mac10.9.1。在使用Maven Jboss作为插件多次部署/取消部署我的WAR文件后,我的服务器因以下错误而死亡

15:05:10,120 ERROR [org.xnio.listener] (Remoting "daves-macbook-pro:MANAGEMENT" read-1) A channel event listener threw an exception: java.lang.OutOfMemoryError: PermGen space

sudo jmap -dump:format=b,file=/tmp/leak 16274
sudo jhat -J-Xmx2048m /private/tmp/leak
但是当我访问结果页面时,除了显示localhost而不是locohost.mymachine.com之外,输出完全难以辨认。例如,有很多行引用了我们编写的类

Package org.mainco.subco.myproject.interaction.domain
class org.mainco.subco.myproject.interaction.domain.Note [0x2d145258]
class org.mainco.subco.myproject.interaction.domain.NoteDto [0x2a8de180]
class org.mainco.subco.myproject.interaction.domain.Note_ [0x2baa5980]

但是我如何追溯到导致这些PermGen错误的代码部分呢?

如果您想追踪类加载器泄漏,我建议您使用比jmap和jhat更高级的工具,比如Eclipse内存分析器MAT。是如何进行此类分析的逐步指南。它是解释代码中可能犯的不同错误的博客系列的一部分,以及可能引发问题的第三方库的列表


在多次部署/取消部署我的WAR文件后,如果您想解决此问题,也会遇到一个问题。

这不太可能是由代码中的任何内容造成的。这可能是因为JBoss没有足够快地清理未部署的WAR,或者可能是因为您有一些东西保存了对WAR的引用,这通常是由应用程序类加载器而不是WAR类加载器加载的。在这两种情况下,JHat和JMap都帮不了你。你可以尝试跟踪类的加载/卸载,看看是否有什么特别奇怪的地方。查看更多信息。您是在谈论有关+TraceClassLoading的部分吗?如果是这样的话,您的意思是手动查看服务器日志并设法找出哪些类已加载但未卸载?是的。尽管我更喜欢使用sed、sort和uniq等工具,而不是从打印输出中检查名称。很抱歉,永久发电机问题没有捷径。