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

时间:2010-08-11 22:44:09

标签: java tomcat jsf netbeans permgen

最近,在使用Netbeans 6.8处理JSF Web应用程序时,我不断得到PermGen:Out of Memory错误。我也注意到这与热交换代码无关,正如有些人在论坛上建议的那样;每当我重新部署代码时,我通常会重新启动我的本地Web服务器Tomcat 6.0。这曾经偶尔发生在我身上,但是最近,它一直在发生。我崩溃之前通常不会超过两分钟。

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

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

在catalina.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

答案 1 :(得分:0)

我发现在不运行探查器或调试器的情况下跟踪内存泄漏有用的东西是使用“jmap -histo”命令(随jdk一起提供)。将此程序的输出保存到文件中。在应用程序运行时每隔几分钟运行一次。收集输出并查找始终在数量和大小上增加的对象。我甚至编写了一个快速的应用程序,可以随着时间的推移绘制所选对象的图形,以便真正突出显示逃跑对象,以便更容易查看可能发生泄漏的位置。