Java最大堆大小(Xmx)基于XX:printFlagsFinal未被识别

5
我将一个Java服务器配置为使用-Xmx12288M-Xmx12288M启动。然而,当我进入Java进程并运行以下命令:java -XX:+PrintFlagsFinal -version | grep -iE 'MaxHeapSize'时,我看到的值是4141875200,我认为这大约是4GB。
我运行了jps -vl,我确实看到了-Xmx12288M。我是在错误的地方查看进程可以使用的最大堆大小吗?还是它实际上没有使用配置的最大堆大小?
这是在64位JVM上运行的。
2个回答

9

看起来: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 ...

是的,这是正确的答案。运行java -version将启动一个新的Java进程。 - Amir Afghani

3
我看你查看的最大堆大小的地方有误。正如@Aishwar所指出的那样,运行$ java -version会创建一个新的Java进程。您可以使用PrintFlagsFinal标志将其添加到服务器的Java选项中并阅读日志文件,或者仅使用类似jinfo或JVisualVM的工具连接到Java进程并检查使用情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接