【问题标题】:Tomcat problem - Could not reserve enough spaceTomcat 问题 - 无法保留足够的空间
【发布时间】:2011-09-08 07:21:23
【问题描述】:

我正在运行具有 256MB RAM 的服务器。我可以为 Java 分配的最大堆大小为 110MB。当我将这些参数添加到 JAVA_OPTS 时,我可以运行 java -version。问题是我无法使用这些参数运行 Tomcat。 Tomcat 运行的最大堆大小为 40MB。不知道为什么不能分配更多的内存?

当然我得到错误:

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

【问题讨论】:

  • 您确定有足够的内存用于这种大小的堆吗?检查服务器上的可用内存空间。
  • 我的主要问题是:如果我可以为 Java 分配 110MB,为什么我不能为 Tomcat 堆大小分配 110MB?

标签: java tomcat memory heap-memory


【解决方案1】:

CATALINA_OPTS 设置为-Xmx110mJAVA_OPTS。我想你可以同时设置,当然。

【讨论】:

  • 我还尝试将 CATALINA_OPTS 设置为 -Xmx110m,但出现错误。
【解决方案2】:

错误消息表明您没有足够的可用 RAM 尝试关闭其他应用程序并查看是否可以分配更大的堆。恐怕您可能需要更多 RAM。

【讨论】:

  • 我的服务器上只有一个应用程序。没有其他进程正在运行。
  • 奇怪的是你运行的是什么操作系统?
【解决方案3】:

当您运行带有-version 标志的java 可执行文件时,Xmx 标志可能会被忽略。这取决于您如何传递版本标志。以下是我在 2GB RAM 的机器上的结果:

版本标志在 Xmx 之前传递

C:\Users\Reynolds>java -version -Xmx10240M
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)

考虑到 10G 超出了 32 位环境中内存的最大可寻址限制,这很奇怪。

Xmx 之后传递的版本标志

C:\Users\Reynolds>java -Xmx10240M -version
Invalid maximum heap size: -Xmx10240M
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.

C:\Users\Reynolds>java -Xmx1524M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine. 

更接近现实。

您可能希望使用第二种方法验证 Java 实际有多少连续内存可用,然后确定最大堆大小的最佳值。

【讨论】:

  • 我认为假设java -version实际上并没有创建JVM是合理的
  • @matt,不,事实并非如此。在Oracle/Sun JVM中,它实际上是执行sun.misc.Version类的print()方法。
猜你喜欢
  • 2013-11-04
  • 2012-12-11
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多