【问题标题】:Tomcat JVM memory tweakingTomcat JVM 内存调整
【发布时间】:2013-11-03 11:14:48
【问题描述】:
我使用的是tomcat7,jvm内存选项设置为
-Xms2048m -Xmx2048m
-XX:NewSize=256m -XX:MaxNewSize=256m
-XX:PermSize=256m -XX:MaxPermSize=256m
使用这些设置服务器无法启动并出现错误
Error occurred during initialization of VM
Too small initial heap for new size specified
即使我将 NewSize 增加到 512 或 1024,它也是一样的,只有当我删除 NewSize 选项时它才有效。
2048MB 的堆大小,这些大小有效吗?
【问题讨论】:
标签:
java
tomcat
memory-management
jvm
jvm-arguments
【解决方案1】:
删除NewSize 参数,然后在运行您的应用程序时监控YoungGen 的占用情况。然后根据 YoungGen 的大小,您可以返回并将参数更改为最佳值。
使用例如gc logging 和/或jstat 以查看堆中每个区域的占用情况。
此外,请检查您的参数是否已被 VM 正确解析,例如而不是 256MB 的 YoungGen JVM 可能认为你想要 256B。
【解决方案2】:
我有 4GB 内存 64 位。我也遇到了同样的错误,但用这个配置修复了。设置 JAVA_OPTS=%JAVA_OPTS% -Xms2560m
set JAVA_OPTS=%JAVA_OPTS% -Xmx2560m
set JAVA_OPTS=%JAVA_OPTS% -XX:NewSize=1280m
set JAVA_OPTS=%JAVA_OPTS% -XX:MaxNewSize=1280m
set JAVA_OPTS=%JAVA_OPTS% -XX:PermSize=400m
set JAVA_OPTS=%JAVA_OPTS% -XX:MaxPermSize=400m
set JAVA_OPTS=%JAVA_OPTS% -XX:+UseCompressedOops
set JAVA_OPTS=%JAVA_OPTS% -XX:+UseParNewGC
set JAVA_OPTS=%JAVA_OPTS% -XX:+DisableExplicitGC
set JAVA_OPTS=%JAVA_OPTS% -XX:+UseConcMarkSweepGC
set JAVA_OPTS=%JAVA_OPTS% -XX:SurvivorRatio=6
set JAVA_OPTS=%JAVA_OPTS% -XX:+CMSClassUnloadingEnabled
set JAVA_OPTS=%JAVA_OPTS% -Dsun.rmi.dgc.client.gcInterval=3600000
set JAVA_OPTS=%JAVA_OPTS% -Dsun.rmi.dgc.server.gcInterval=3600000