2015-11-13 93 views
1

我配置了一个Java服务器,以-Xmx12288M-Xmx12288M开头;但是当我进入Java进程并运行这个:java -XX:+PrintFlagsFinal -version | grep -iE 'MaxHeapSize'时,我看到4141875200的值 - 我相信这是〜4GB。基于XX不考虑Java最大堆大小(Xmx):printFlagsFinal

我跑jps -vl,我确实在那里看到-Xmx12288M。我是否正在查看过程可以使用的最大堆大小的错误位置?或者它实际上没有使用配置的最大堆大小?

这是在64位JVM上运行。

回答

3

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

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

2

我是不是看错了地方的最大堆大小的过程可以 用?

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

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