初始堆大小无效。无法创建Java虚拟机

时间:2013-05-07 10:31:52

标签: java java-ee tomcat deployment

我遇到了下一个问题: 我试图通过startup.bat手动启动Tomcat,但似乎没有显示任何结果,然后我试图运行shutdown.bat并且控制台显示下一个:

 D:\apache-tomcat-7.0.35\bin>startup.bat
Using CATALINA_BASE:   "D:\apache-tomcat-7.0.35"
Using CATALINA_HOME:   "D:\apache-tomcat-7.0.35"
Using CATALINA_TMPDIR: "D:\apache-tomcat-7.0.35\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.6.0_31"
Using CLASSPATH:       "D:\apache-tomcat-7.0.35\bin\bootstrap.jar;D:\apache-tomcat-7.0.35\bin\tomcat-juli.jar"
D:\apache-tomcat-7.0.35\bin>shutdown.bat
Using CATALINA_BASE:   "D:\apache-tomcat-7.0.35"
Using CATALINA_HOME:   "D:\apache-tomcat-7.0.35"
Using CATALINA_TMPDIR: "D:\apache-tomcat-7.0.35\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.6.0_31"
Using CLASSPATH:       "D:\apache-tomcat-7.0.35\bin\bootstrap.jar;D:\apache-tomcat-7.0.35\bin\tomcat-juli.jar"
Invalid initial heap size: -Xms256m -Xmx512m -XX:MaxPermSize=256m
Could not create the Java virtual machine.

catalina.bat是原创的,我也检查了所有的pathes和opts(即JAVA_HOME,JRE_HOME,CATALINA_BASE,CATALINA_HOME,CATALINA_TMPDIR)。 tomcat版本是7.0.35 java v 1.6

7 个答案:

答案 0 :(得分:8)

这是你的问题 Invalid initial heap size: -Xms256m -Xmx512m -XX:MaxPermSize=256m

某些系统(可能是Windows JRE)理解以小写字母给出的XmsXmx值。这里256m和512m分别表示256MB和512MB。

某台机器(Ubuntu上的JDK 1.7)无法理解small m for MB。因此,当我更改Xms256m -Xmx512m,to => Xms256 M -Xmx512 M 时,它开始工作。

  

P.S - >我在Ubuntu 15(JDK)上安装IntelliJ时遇到此错误   1.7),我编辑了IntelliJ的/bin/idea.vmoptions文件,它开始工作。

     您错误地设置 Xmx 和错误可能会导致错误

Here is a list    Xms 值 -

java -Xmx4056M -Xms4056M HelloWorld

问题:VM初始化期间发生错误,对象堆+ VM数据的大小超过最大可表示大小

原因:-Xms或-Xmx的值高于或接近物理内存的大小,因为我的机器有4GB内存。

java -Xmx1056M -Xms2056M HelloWorld

问题:在VM初始化期间发生错误,指定了不兼容的最小和最大堆大小

原因:-Xms的值高于-Xmx

java -Xms2056M HelloWorld

问题:VM初始化期间发生错误,无法为对象堆保留足够的空间

原因:仅提供-Xms且未提供-Xmx。如果你有拼写错误,你也会得到这个错误而不是-Xmx你已经指定了-Xms两次

java -Xms1024 M -Xmx1024M HelloWorld

问题:VM初始化期间发生错误,初始堆太小

原因:如果您的空间介于1024和M之间,那么JVM假定-Xms的大小仅为1024字节,并且打印错误使其对于JVM来说太小而无法启动

答案 1 :(得分:1)

here获取了正确的参数(JAVA_OPTS)。我把它们设置在setenv.bat。

答案 2 :(得分:1)

这个问题在我尝试运行Cassandra时发生了。

卸载Java 32位并安装Java 64位为我解决了此问题。

答案 3 :(得分:0)

在我的情况下,原因是在-Xms之前有-javaagent选项。以正确的顺序java -javaagent:xxx -Xms256m执行此操作即可达到目的。

答案 4 :(得分:0)

在R中初始化用于深度学习的h2o时,我遇到了相同的错误。删除了设置的最小内存大小之间的空间:

h2o.init(min_mem_size =“ 10 G”)我收到错误消息:

VM初始化期间发生错误 初始堆太小

删除10和G之间的空格后,它起作用了:

h2o.init(min_mem_size =“ 10G”)

答案 5 :(得分:0)

问题:尽管您似乎遇到语法问题,但您尝试初始化应用程序的最小和最大堆大小。您需要正确设置。请注意,所支持的最小和最大大小点与应用程序正在运行的计算机内存有关。

来自 Oracle Documentation

-Xms
The -Xms option sets the initial and minimum Java heap size.
The Java heap (the “heap”) is the part of the memory where blocks of memory
are allocated to objects and freed during garbage collection.

Note:   -Xms does not limit the total amount of memory that the JVM can use.
Format: -Xms<size>[g|G|m|M|k|K]


-Xmx
This option sets the maximum Java heap size.
The Java heap (the “heap”) is the part of the memory where blocks of memory 
are allocated to objects and freed during garbage collection.
Depending upon the kind of operating system you are running,
the maximum value you can set for the Java heap can vary.

Note:   -Xmx does not limit the total amount of memory that the JVM can use.
Operation
Format: -Xmx<size>[g|G|m|M|k|K]

示例

java cli java -Xs:64m -Xmx:1g -jar app.jar

docker-compose.yml 示例(不同的语法)上:

version: '3'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    user: jenkins
    environment:
      - JAVA_OPTS=-Xms512m -Xmx2048m 
    ports:
      - "0.0.0.0:8080:8080"

答案 6 :(得分:0)

即使系统中有可用的物理内存,您也可能会遇到此问题。 在大多数32位Java版本上,最大堆大小为1.4G至1.6G。有关更多详细信息,请访问此link

如果必须将超过1.4G的JVM初始化为1.6G的堆内存,则应安装64位Java版本。

相关问题