我在64位CentOS服务器上安装了Apache Tomcat 7.0.27,并提供了37G的物理内存。对于我在Tomcat中运行的Web应用程序,我需要大量可用内存,因此我设置了类似于下面的Tomcat setenv.sh:
export JAVA_OPTS="
-Xms30g
-Xmx30g
-XX:PermSize=256m
-XX:MaxPermSize=256m
-XX:NewSize=6g
-XX:MaxNewSize=6g
-XX:SurvivorRatio=8
-XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=80"
我的Java版本是:
java version "1.6.0_41"
Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)
当我运行{tomcat_home} /bin/startup.sh时,应用程序启动并运行正常但偶尔使用{tomcat_home} /bin/shutdown.sh关闭时,我收到以下消息:
Error occurred during initialization of VM
Could not reserve enough space for object heap
为什么会这样?
答案 0 :(得分:1)
shutdown脚本尝试通过运行连接到Tomcat的关闭端口(8009?)的小型Java程序并发送消息来进行有序关闭。
该程序在其自己的JVM中运行,如果您的系统内存不足,则可能无法启动该JVM以将shutdown命令发送到正在运行的Tomcat。