2012-12-20 31 views
4

我运行的Tomcat 7.0.33的Windows Server 2008 R2 (我安装Tomcat作为窗口服务)java.lang.OutOfMemoryError:PermGen的空间tomcat7窗口服务

  • JDK版本:jdk1.6.0_25 64-bit
  • 的Tomcat选项:

    1. Java虚拟机:C:\Program Files\Java\jre6\bin\server\jvm.dll (顺便说一句,我没有内部的JRE客户端文件夹)
    2. 初始内存池: 1000 MB
    3. 最大内存池: 2000 MB

      当我检查服务器状态时,我可以看到服务器正在使用我配置的内存 。

    4. 环境变量(系统变量)配置:

      • JAVA_HOME:C:\Program Files\Java\jdk1.6.0_25
      • 路径:...;%JAVA_HOME%\bin;....

我需要添加CATALINA_HOMEJAVA_OPTS系统变量吗?

问题:我有两个Web应用程序APP1,* APP2 * 当我单独部署每一个,我能找到的内存使用

APP1 = 198 MB APP2 = 104 MB

有关应用的信息:

APP1,APP2:Spring Maven应用程序在库中包含其他小型Maven Spring应用程序。

APP1:包含web服务,即APP2使用它们。

,如果我想他们都在同一个Tomcat实例部署,我总是得到

java.lang.OutOfMemoryError: PermGen space 

请指教什么可能会造成这个问题。

+0

是这始终之后新的部署或之后部署(例如,在开发过程中)多少次? 你的webapps中有多少个类? – Korgen

回答

10

解决方案是在设置初始&最大内存池旁边,是将-XX:MaxPermSize=1000m添加到java选项卡中的java选项。

+0

3000MB?什么,你在32GB内存的机器上开发什么? – Makoto

+0

@Makoto,添加任何你想要的大小,我只是想念这个参数。 –

9

您可能需要为您的Tomcat实例设置/增加MaxPermSize设置。请注意,MAVEN_OPTS与Tomcat无关,这些是Maven命令行进程(mvn)的选项。事实上,您的应用程序是“maven”应用程序意味着在运行时没有任何问题,因为Maven不参与您的应用程序的运行,只有建筑物

在Tomcat安装的\bin文件夹,里面应该是叫“tomcat7.exe”的应用程序。你可以用它来更新你的tomcat服务的设置。

尝试像

tomcat7.exe //US//[name of your tomcat service] --JvmOptions=-Xmx2g -Xms1g -XX:MaxPermSize=512m

编辑:上面的说法应该是在同一行,而不是两个......

+0

你能看到我在tomcat管理器中使用的最小1GB和最大2GB。 –

+0

您仍然需要将MaxPermSize指令添加到tomcat JVM选项。 – pap

3

你需要增加PermGen的空间。在你的参数中添加-XX:MaxPermSize=128m之类的东西(如果你愿意的话可以预留更多的perm gen空间)。 -Xmx-Xms设置用于堆,而在这里您将用完PermGen space,这是分开管理的。

+0

这是我的误解。我必须设置tomcat管理器的堆大小和管理器中的jvm选项的maxpermsize。 –

5

我也有类似的问题,因为我们在Tomcat上运行的应用程序没有问题时,Tomcat的独立运行,我们不停地奔跑Tomcat作为服务时,得到的PermGen内存不足异常。

我发现了一个解决方案,与Pap的一个类似。您需要通过运行bin/tomcat7w.exe // ES // name_of_service来访问Tomcat服务配置GUI。在那里你去Java选项卡并直接设置各自的java属性 - 例如 -XX:MaxPermSize=1000m

这是一篇博文,帮助我解释了Tomcat作为服务运行时所忽略的所有Tomcat设置。 http://www.12robots.com/index.cfm/2010/10/8/Giving-more-memory-to-the-Tomcat-Service-in-Windows

+0

+1 *表示“为Windows中的Tomcat服务提供更多内存”*链接,当Tomcat作为**服务**运行时,这很好地解释了这一点。 – Withheld