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 进程并检查使用情况.
我配置了一个 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 进程并检查使用情况.