Java Tomcat关闭失败,内存错误

Java Tomcat关闭失败,内存错误,java,tomcat,memory,Java,Tomcat,Memory,我在64位CentOS服务器上安装了ApacheTomcat 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

我在64位CentOS服务器上安装了ApacheTomcat 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

为什么会发生这种情况?

关机脚本试图通过运行一个连接到Tomcat的关机端口(8009?)并发送消息的小型Java程序来进行有序关机


该程序在自己的JVM中运行,如果您的系统内存不足,则可能无法启动该JVM以向正在运行的Tomcat发送关机命令。

top命令显示机器上仍有3.5G可用空间。我希望这足以运行那个小型关闭程序。该程序是否使用了在{tomcat_home}/bin/setenv.sh中设置的相同java选项?这个答案表明我应该在setnenv.sh中的CATALINA_opts变量中指定堆大小,而不是在java_opts中。JAVA_OPTS中的任何内容都用于此答案所指的关闭婴儿车。所以本质上我是想再分配30个Gig来关闭Tomcat。