java.lang.OutOfMemoryError:PermGen空间(不是通常的嫌疑人!)

时间:2011-11-24 01:06:00

标签: jsp java-ee permgen

jsp页面中此行发生错误!

    <table:table name="sessionScope.users" sort="external" pagesize="50" id="user" class="list" 
    requestURI="/admin-users.html" partialList="true" size="sessionScope.fullListSize">

我尝试使用其他帖子中的方法将perm gen max增加到512m,用于调用eclipse和Tomcat实例。

好的,所以需要更多的上下文:这是我的开发系统,在eclipse中运行,并指向一个独立的tomcat实例,它是Eclipse中的服务器。

根据Recurring "PermGen" in Tomcat 6,我在eclipse.ini中有以下内容:

--launcher.XXMaxPermSize
512m

// ...

-XX:MaxPermSize=512m
-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-Xms256m


-Xmx512m

2 个答案:

答案 0 :(得分:0)

您可能已经将一次太多次重新部署到Tomcat。弹跳Tomcat,它会很好 - 直到你再次重新启动perm gen空间。

更新:

如果每次点击该页面时,我都会担心您的网页正在做什么。 JSP是servlet的模板,随后将其编译为.class文件。如果JSP太大以​​至于它正在填补你的perm gen空间,你就会遇到一个大问题。

关于泄漏检测的所有建议似乎都是错误的。泄漏通常会随着时间的推移而出现。你在下面说过它会在每次访问时发生。

我建议如下:

  1. 让Eclipse脱离它。如果您手动部署WAR并启动Tomcat,您是否观察到相同的行为? Eclipse启动可能是错误的。
  2. 您可以调整内存和perm gen空间的大小。谷歌的JVM选项,看看如何做到这一点。
  3. 下载Visual VM 1.3.3,安装所有插件,然后在运行Tomcat之前启动它。我会让你实时了解你的记忆。你也可以看到许多其他有用的东西,比如线程等。你需要更多的数据,而不是猜测。

答案 1 :(得分:0)

在重新部署时,编写良好的Web应用程序不应挂在其类加载器上,但可能存在多种原因。

如果你在Tomcat上运行,你可能想在server.xml中尝试这个:

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

This page有更多信息。