Netbeans Java调试器因内存不足而崩溃

Netbeans Java调试器因内存不足而崩溃,java,tomcat,jsf,netbeans,permgen,Java,Tomcat,Jsf,Netbeans,Permgen,最近,在使用Netbeans 6.8开发JSF web应用程序时,我经常遇到PermGen:内存不足错误。我还注意到,正如一些人在论坛上建议的那样,这与热交换代码无关;每当我重新部署代码时,我通常会重新启动本地web服务器Tomcat6.0。这种情况曾经偶尔发生在我身上,但最近,这种情况一直在发生。在它崩溃之前,我通常不能超过两分钟 我对这个问题的一个重要观察是,它似乎只在运行调试器时发生。如果我定期启动服务器,它将无限期运行。只要我在调试模式下运行,就会出现这个问题 到目前为止,我已经尝试了所

最近,在使用Netbeans 6.8开发JSF web应用程序时,我经常遇到PermGen:内存不足错误。我还注意到,正如一些人在论坛上建议的那样,这与热交换代码无关;每当我重新部署代码时,我通常会重新启动本地web服务器Tomcat6.0。这种情况曾经偶尔发生在我身上,但最近,这种情况一直在发生。在它崩溃之前,我通常不能超过两分钟

我对这个问题的一个重要观察是,它似乎只在运行调试器时发生。如果我定期启动服务器,它将无限期运行。只要我在调试模式下运行,就会出现这个问题

到目前为止,我已经尝试了所有在Tomcat中增加JAVA的JAVA_OPT内存设置的技巧;我已经尝试在Netbeans.conf中增加Netbeans的可用内存。还是不走运。如果您想查看我所做的具体配置更改,我也可以发布

我还读到,这可能是Java内存泄漏的结果。我试过运行Netbean的分析器,但在我做任何真正有用的事情之前,它通常也会崩溃。此外,当它运行时,所有具有荒谬代的对象分配都是java库或原语中的东西——例如,具有最大代的char[]s是应用程序中最大的内存消耗

我很想知道以前是否有人遇到过类似的问题,如果有,他们是如何解决的。这开始严重阻碍我的工作能力


谢谢您的帮助。

将此条目添加到catlina.sh(或bat)中,它对我很有用

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 
    -server -Xms1536m -Xmx1536m
    -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=512m 
    -XX:MaxPermSize=512m -XX:+DisableExplicitGC

我发现,在不运行探查器或调试器的情况下跟踪内存泄漏非常有用的方法是使用“jmap-histo”命令(jdk附带)。将此程序的输出保存到文件中。在应用程序运行时,每隔几分钟运行一次。收集输出并查找数量和大小不断增加的对象。我甚至编写了一个快速应用程序来绘制所选对象随时间变化的图表,以真正突出显示失控对象,以便更容易地查看可能发生泄漏的位置。

netbeans.conf是否显示-J-XX:PermSize=32m-J-XX:MaxPermSize=200m?我以前将该值设置为相同的值,即1024m。我改变了你的建议,分别设置为256和512。现在,它崩溃的方式不同了。虽然它过去常常会立即出现PermGen错误,但现在它通常只是挂起,有时我会遇到实际错误,而其他时候,它只是无限期挂起。首先需要一个堆转储来识别泄漏的对象和使它们保持活动状态的对象。一旦您知道了这一点,您可以立即解决问题(如果问题足够简单并且您熟悉罪魁祸首所在的代码),或者使用探查器确定泄漏实例的分配位置。您可以使用jmap或visualvm(jvisualvm)来获取堆转储。为了进行分析,你也可以使用visualvm,但当然你可以选择任何你喜欢的工具——例如,如果你想坚持使用免费工具,你可以选择MAT。谢谢你,我在调试tomcat应用程序时在Netbeans中乱用了这些设置,直到你的问题让它全部点击。谢谢你的回答。