【问题标题】:What should be the JVM heap size (Xms Xmx) for JDK8 64-bit on Linux having physical memory of 16 GB RAM and 8 CPU [closed]物理内存为 16 GB RAM 和 8 CPU 的 Linux 上 JDK8 64 位的 JVM 堆大小(Xms Xmx)应该是多少 [关闭]
【发布时间】:2019-04-19 08:27:48
【问题描述】:

我的 Linux 服务器上安装了 JDK8 x64,有 16GB 的 RAM 和 8 个 CPU。

我已经如下设置了 JVM 堆大小,但不断收到 java.lang.OutOfMemoryError

JAVA_OPTS="-Xms2048m -Xmx4096m -XX:MaxPermSize=1024m -XX:-UseGCOverheadLimit

任何建议,最小/最大/PermGen 堆大小应该是多少。

【问题讨论】:

  • 这完全取决于您正在运行的应用程序。您能否就此提供更多见解?
  • 不断收到 java.lang.OutOfMemoryError 比你拥有的更多
  • 顺便说一句。如果您正在运行 Java 8 应用程序,您可以摆脱 -XX:MaxPermSize=1024m。 Java8 不再支持此功能(用于加载的类和方法的内存模型不同且不受限制(使用默认设置))
  • 如果您不知道发生了什么,请尝试生成堆转储:-XX:+HeapDumpOnOutOfMemoryError。比你可以看到是什么消耗了所有的内存。
  • @PeterLawrey 我们可以排除 Java 8 安装的 permgen 问题。

标签: java jvm 64-bit heap-memory permgen


【解决方案1】:

导致内存不足错误,因为您的代码消耗的堆大小超过了 Java 分配的大小。

这可能有多种原因。

1) 您的代码很庞大,需要更多内存:仅打印“Hello World”的简单代码不会消耗太多内存。但是,1 GB 源代码的冗长而庞大的应用程序会消耗大量内存。如果是这种情况,您可以尝试增加内存参数。

2) Bad Code:Bad Code,它消耗无用的内存,并且以后不释放它,导致持续使用的堆大小比收集的垃圾多。如果这是您可能需要确定代码问题的代码。您实际上可以使用Java Flight Record (JFR) 识别消耗大量堆的方法或类。

理想的堆内存大小因情况而异,您的要求必须知道确切的堆大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-05
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多