簡體   English   中英

Java:如何檢查當前的Perm / PermGen大小?

[英]Java : how to check current Perm / PermGen Size?

昨天當我運行WebLogic Application Server 11g安裝程序時,我遇到了OutOfMemory錯誤,所以我用Google搜索了答案:

java -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -jar wls1032_generic.jar

一切正常:)

但是,當我對解決方案三思而后行時,我可能犯了一個錯誤:我怎么知道這些設置的當前設置? 我當然需要在覆蓋它們之前檢查它們的值,對吧?

有什么想法嗎?

相關鏈接:人們在SO的另一個帖子中提出了試錯法,這並不理想。

提前謝謝了。

您可以使用jinfo.exe實用程序檢查正在運行的JVM的任何JVM標志的值。

%JAVA_HOME%\\bin\\jinfo.exe -flag <flagName> <pid>

所以要檢查-XX:PermSize JVM選項的值,你可以運行

%JAVA_HOME%\\bin\\jinfo.exe -flag PermSize <pid>

您可以在這里使用jmap ,它是JVM堆轉儲工具。

例如:

jmap -heap 5900

它將打印:

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 989855744 (944.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 242352128 (231.125MB)
   used     = 9196056 (8.770042419433594MB)
   free     = 233156072 (222.3549575805664MB)
   3.79450185805672% used
From Space:
   capacity = 41877504 (39.9375MB)
   used     = 0 (0.0MB)
   free     = 41877504 (39.9375MB)
   0.0% used
To Space:
   capacity = 42663936 (40.6875MB)
   used     = 0 (0.0MB)
   free     = 42663936 (40.6875MB)
   0.0% used
PS Old Generation
   capacity = 80609280 (76.875MB)
   used     = 34187936 (32.604156494140625MB)
   free     = 46421344 (44.270843505859375MB)
   42.41191088668699% used
PS Perm Generation
   capacity = 85393408 (81.4375MB)
   used     = 63472624 (60.53221130371094MB)
   free     = 21920784 (20.905288696289062MB)
   74.32965317416539% used

它獲取內存信息(包括PermGen)。 5900是Java的進程ID。

您可以使用VisualVM, http: //java.dzone.com/articles/best-kept-secret-jdk-visualvm&default=false&zid=159&browser=16&mid=0&refresh=0來監控您的內存使用情況,您將看到最大值通過它達到峰值的位置,它將為您提供有關內存的哪個部分實際已滿的具體信息,以便您可以更好地優化您的環境。

你可能會發現你沒有想到的某些內存部分實際上正在填滿,通過監視它你可以看到你需要做些什么才能獲得更好的性能。

獲取PermGen信息的另一種方法是:

kill -3 JAVA_PID

它獲取線程轉儲和內存信息(包括PermGen)。 示例輸出:

PSPermGen       total 68864K, used 68808K [0x000000009c600000, 0x00000000a0940000, 0x00000000a1800000)

出於某種原因, jinfo在我需要它時不起作用。 它返回:

Unable to open socket file: target process not responding or HotSpot VM not loaded

上面幾乎沒有可能的原因,其中一個可能是java.io.tmpdir的明確聲明,如https://www.permeance.com.au/web/terry.mueller/home/-/blogs/所述。 無法對開放套接字文件-目標-過程-不回應,或熱點-VM-未加載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM