我们在环境中得到了java.lang.OutOfMemoryError:PermGen空间: Windows Server 2012 R2 64位8GB RAM JRE 1.7 u80 Tomcat 7.0.73 ActiveMQ 5.9.0 Mule运行时3.5.4 通过Tomcat 7部署的Mule管理控制台3.5.3 使用PhantomJS 1.9.8部署在Tomcat 7上的webservice war文件
使用以下设置在Tomcat / bin文件夹下的setenv.bat文件: setenv JAVA_OPTS = -Xms512M -Xmx2048m -XX:PermSize = 1024m -XX:MaxPermSize = 1024m此外,在tomcat7w.exe下的JVM注册表设置: 初始内存池:256 MB 最大内存池:1536 MB
可以解释哪个优先,setenv.bat文件设置或tomcat7w.exe设置为内存池? 此外,这个环境的理想设置应该是什么,因为这些设置目前在带有16GB RAM的64位Windows Server 2008 R2上运行?
答案 0 :(得分:0)
这取决于您启动Tomcat的方式,无论是以Windows服务还是通过catalina.bat启动它。
您可以查看以下帖子:[问题]:Configure Tomcat as a service (no catalina.bat)
答案 1 :(得分:0)
正如@GKGeorgiev所说,这将取决于你如何推出Tomcat。
我建议你做一点实验:
将setenv.bat
中的最大堆大小设置更改为足以触发立即失败的值。
启动Tomcat。
如果这导致行为发生变化(例如立即失败),您就会知道setenv.bat
文件是优先考虑的文件。如果没有,那就没有。
然后反过来做实验;即更改等效的注册表设置,看看是否有任何影响。
另外,请检查适用于您正在使用的启动方法的Tomcat文档。
最后,建议升级到Java 8. Java 7远远超出其EOL,并且运行没有获得安全补丁的Java版本存在风险。
答案 2 :(得分:0)
用于理想的内存设置
Xms和Xmx应该相等,
在catalina.bat内部JAVA_OPTS变量你应该定义内存参数。
开始时这将优先。
小心