2

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

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

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

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

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

谢谢你的帮助。

4

2 回答 2

2

在 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
于 2011-03-24T18:01:55.983 回答
0

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

于 2011-03-31T05:03:35.337 回答