【问题标题】:What is effective Xmx value on my redhat machine running tomcat在运行 tomcat 的 redhat 机器上,有效的 Xmx 值是多少
【发布时间】:2018-08-27 13:05:07
【问题描述】:

我在 1GB RAM 的 RHEL 7 机器上运行 tomcat。我已经设置了 tomcat 和 java 都有 Xmx=1G 和下面的语句支持,

[root@ip-172-31-28-199 bin]# java -XX:+PrintFlagsFinal -version | grep HeapSize 拾取 _JAVA_OPTIONS: -Xmx1g uintx ErgoHeapSizeLimit = 0 {产品} uintx HeapSizePerGCThread = 87241520 {产品} uintx InitialHeapSize := 16777216 {产品} uintx LargePageHeapSizeThreshold = 134217728 {产品} uintx MaxHeapSize := 1073741824 {product} openjdk 版本“1.8.0_161”

tomcat 2799 1 1 02:21 ? 00:00:07 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Djdk.tls。 ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xmx1024M -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat- juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start

但是当我得到异常时,我会收到以下消息,

Java 运行时环境没有足够的内存继续运行。

本机内存分配 (mmap) 未能映射 244043776 字节以提交保留内存。

我知道 java 永远不能要求 1GB 内存,因为那是机器的总内存。但是为什么我提到这个尺寸时会出错?

【问题讨论】:

  • 这是一个逻辑问题。如果你的服务器只有 1GB RAM,为什么你认为应该为 Tomcat 保留 1GB RAM?操作系统和其他软件也需要使用系统内存!你最好增加你的服务器内存。

标签: java tomcat memory redhat heap-memory


【解决方案1】:

试试也加-Xms1g,这样一开始它会分配所有内存,你会发现它甚至无法启动Tomcat。

如果您想将尽可能多的内存挤入 Tomcat(不推荐),请慢慢减少这两个数字(mxms 的值相同)直到 Tomcat 启动。

这是你可以给 Tomcat 的绝对最大值,但你不应该这样做。 Java 在运行时可能仍然需要更多,而操作系统偶尔会需要更多,因此您应该给 Tomcat 提供的值低于绝对最大值。

现在您已经找到了号码,如果您愿意,可以再次将-Xms 保留为未定义。

【讨论】:

    【解决方案2】:

    有一篇有趣的帖子 here 建议禁用 OOPS。 您运行的是物理服务器还是虚拟机?

    我同意 1G 的服务器太小,你应该运行 Xmx=512M 并允许一些交换(vm.swappiness = 60 是默认值,对于小型 Tomcat 应该没问题)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 2012-02-12
      • 2015-05-06
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      相关资源
      最近更新 更多