2015-11-13 120 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進程並檢查使用情況。