基于XX:printFlagsFinal不尊重Java Max堆大小(Xmx)

时间:2015-11-13 18:18:02

标签: java jvm server heap-memory

我将Java服务器配置为以-Xmx12288M-Xmx12288M开头;但是当我进入Java进程并运行它:java -XX:+PrintFlagsFinal -version | grep -iE 'MaxHeapSize'时,我看到值为4141875200 - 我相信它是~4GB。

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

这是在64位JVM上运行。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

  

我是否在查找错误的位置以获得该进程可以达到的最大堆大小   使用?

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

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

相关问题