17

我遇到了下一个问题:我试图通过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 是原创的,我也检查了所有路径和选项(即 JAVA_HOME、JRE_HOME、CATALINA_BASE、CATALINA_HOME、CATALINA_TMPDIR)。tomcat 版本是 7.0.35 java v 1.6

4

7 回答 7

19

这是你的问题 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时,它开始工作了。

PS -> 在 Ubuntu 15 (JDK 1.7) 上安装 IntelliJ 时出现此错误,我编辑/bin/idea.vmoptions了 intelliJ 文件并开始工作。

以下是错误设置XmxXms值可能导致的错误列表 -

java -Xmx4056M -Xms4056M HelloWorld

问题:VM初始化时出错,对象堆+VM数据的大小超过了最大可表示大小

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

java -Xmx1056M -Xms2056M HelloWorld

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

原因:-Xms 的值高于-Xmx

java -Xms2056M HelloWorld

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

原因:只提供了-Xms,没有提供-Xmx。如果您有错字,并且您指定了两次 -Xmx 而不是 -Xmx,您也会收到此错误

java -Xms1024 M -Xmx1024M HelloWorld

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

原因:如果您在 1024 和 M 之间有空间,则 JVM 假定 -Xms 的大小仅为 1024 字节,并打印错误,即它太小而无法启动 JVM

于 2017-06-20T06:27:31.017 回答
2

我在尝试运行 Cassandra 时遇到了这个问题。

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

于 2019-09-30T15:04:07.590 回答
1

从这里得到正确的参数(JAVA_OPTS)。我已将它们设置在 setenv.bat 中。

于 2013-05-07T13:41:34.777 回答
1

问题:您尝试初始化应用程序的最小和最大堆大小,尽管您似乎遇到了一些语法问题。您需要正确设置它。请注意,您支持的最小和最大尺寸点与您的应用程序正在运行的机器内存相关。

来自Oracle文档

-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"
于 2020-05-26T13:06:47.633 回答
1

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

h2o.init(min_mem_size = "10 G") 我得到错误:

VM 初始化时出错 初始堆太小

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

h2o.init(min_mem_size = "10G")

于 2019-03-06T19:58:22.603 回答
0

即使系统中有可用的物理内存,您也可能会遇到此问题。在大多数 32 位 Java 版本上,最大堆大小范围为 1.4G 到 1.6G。欲了解更多详情,请通过此链接

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

于 2020-06-24T13:23:31.640 回答
0

在我的情况下,原因是-Xms之前有选择权-javaagent。以正确的顺序执行它就可以java -javaagent:xxx -Xms256m了。

于 2019-01-10T16:24:11.300 回答