Java 基于 XX:printFlagsFinal 不遵守最大堆大小 (Xmx)

Java Max Heap Size (Xmx) not respected based on XX:printFlagsFinal

我配置了一个 Java 服务器以 [​​=12=] 和 -Xmx12288M 开始;然而,当我进入 Java 进程并 运行 这个:java -XX:+PrintFlagsFinal -version | grep -iE 'MaxHeapSize',我看到该值为 4141875200 - 我认为是 ~4GB。

我 运行 jps -vl 我确实在那里看到了 -Xmx12288M。我是否在寻找进程可以使用的最大堆大小的错误位置?或者它实际上没有使用配置的最大堆大小?

这是在 64 位 JVM 上 运行ning。

看起来像:java -XX:+PrintFlagsFinal -version | grep -iE 'MaxHeapSize' 启动一个 Java 进程并打印出其上的设置。它不会打印来自 运行 Java 进程的 JVM 设置。

这对我有用:jinfo <pid-of-running-java-process> | grep 'HeapSize'。这打印了:

Non-default VM flags: ...  -XX:InitialHeapSize=12884901888 -XX:MaxHeapSize=12884901888 ...

Am I looking at the wrong place for the max heap size the process can use?

是的,你看错地方了。正如@Aishwar 指出的那样,运行 $java -version 创建了一个新的 Java 进程。你可以:

PrintFlagsFinal 标志添加到您的服务器 Java 选项并阅读日志文件,或者使用 jinfo 或 JVisualVM 等工具简单地附加到您的 java 进程并检查使用情况.