java - 有多少内存必须留给 Java 服务器应用程序的操作系统?

标签 java linux tomcat heap-memory

假设我正在使用 -Xms256m -Xmx1024m 运行 tomcat,但想增加我的堆使用量。

我可以分配的最大安全堆大小是多少?

为了这个问题的目的,请假设系统有 5GB RAM 并且是 z/Linux 系统。但是,如果可能的话,我想要一个更广泛的经验法则答案。

这是专用系统,所以我主要担心操作系统内存使用情况。我不担心其他程序。

此外,如果这是重复的,抱歉。我很惊讶我没有找到关于这种事情的更多信息。

GC

PS:我知道可能需要更多系统信息。我不介意答案是否详细说明如何找到答案,而不是给我一个数字。

最佳答案

如果您非常关心性能,您将希望避免交换堆的所有成本。这意味着您必须确保系统上的总保留内存少于可用 RAM。

很难给出设置堆大小的经验法则,因为我们无法知道您的系统或应用程序的 native 内存消耗。

例如,您的 Java 应用程序将为元空间和 JNI 数据等内容消耗 native 内存。

我认为您能做的最好的事情就是以不太激进的堆大小运行应用程序(想想 5 GB RAM 系统上的 3 GB),以了解它通常消耗多少 native 内存。

当您知道这一点时,您可以相应地调整堆大小并确保留出一些内存(想想 10%)以防万一并用于操作系统级缓存

思考过程应该是这样的:

  • 当我在系统上什么都不运行时消耗的内存是 200 MB

  • 我的 java 应用程序通常消耗的 native 内存为 300 MB

  • 我需要 500 MB 用于操作系统级缓存和“以防万一”

  • 然后我应该能够将我的最大堆大小设置为 5000 - 500 - 300 - 200 = 4000 MB

关于java - 有多少内存必须留给 Java 服务器应用程序的操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30404837/

相关文章:

java - JPA 嵌入式和 BeanValidation

linux - 如何使用 Cron 在 Linux 中更改桌面背景

Tomcat 8.0 - mime 映射和内容类型

Java (JSP) 项目的相对路径

java - Vaadin - 在新的 Vaadin 7.4 Grid 中使用 FontAwesome 呈现链接图标

java - "Error setting operation panel"jconsole 在 a

java - 用很多分隔符分割字符串

linux - 在导入包中定义结构时如何使用 go receiver

node.js - centOS无法通过yum安装nodejs

tomcat - "Hello world"教程错误