我将Java服务器配置为以-Xmx12288M
和-Xmx12288M
开头;但是当我进入Java进程并运行它:java -XX:+PrintFlagsFinal -version | grep -iE 'MaxHeapSize'
时,我看到值为4141875200 - 我相信它是~4GB。
我跑了jps -vl
,我确实看到了-Xmx12288M
。我是否在查找错误的位置以获取进程可以使用的最大堆大小?或者它实际上没有使用配置的最大堆大小?
这是在64位JVM上运行。
答案 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进程并检查用法。