Tomcat:传递-XX:MaxPermSize没有可见效果

时间:2011-10-07 11:13:24

标签: java java-ee tomcat

我正在尝试将我的应用程序部署到Tomcat,但未能这样做。我经常不断地获得OutofMemoryError permgen空间。 我尝试了各种命令行开关(在stackoverflow上搜索关于此的不同问题),如-XX:MaxPermSize,-XX:PermSize,-XX:+ CMSClassUnloadingEnabled,-XX:+ CMSPermGenSweepingEnabled

我给了permgen大小为64,128,256,512,但它们都不起作用。

有趣的是,当我收到错误时,我在任务管理器中看到java进程只占用了大约300mb的内存。我传给-Xms为1024m,但内存消耗仍然在300mb左右。

寻找可能是什么原因的意见?

我的系统详情: 戴尔Latitude 5420 Win XP 32位 4 GB RAM

4 个答案:

答案 0 :(得分:0)

当你说“经常”时,你的意思是在你连续几次重新组合之后?如果是的话,这是Tomcat的一个众所周知的缺陷,你无法做任何事情。增加perm gen空间只会延迟不可避免的。

原因是反射会动态创建最终位于perm gen空间中的类,永远不会被回收。因此名称'perm gen' - 这是垃圾收集器不接触的永久代。

保护法告诉您,如果您拥有有限的容量,并且只是在不删除的情况下添加它,那么您最终将耗尽容量。这就是你在这里发生的事情。

答案 1 :(得分:0)

除了Udo Fholl的回答:最大堆的正确参数ist -Xmx1024M

答案 2 :(得分:0)

Tomcat需要环境变量JAVA_OPTS。例如:

JAVA_OPTS="-XX:MaxPermSize=256m -Xms250m -Xmx650m"

答案 3 :(得分:-1)

-Xms=1024表示起始内存为1024,但是当不需要时它缩小它。