web-dev-qa-db-ja.com

Java:現在のPerm / PermGenサイズを確認する方法は?

昨日、WebLogic Application Server 11gインストーラを実行していたときに、OutOfMemoryエラーが発生したため、Googleで答えを見つけました。

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

すべてがうまくいった:)

ただし、ソリューションについて2度考えたとき、私は間違いを犯した可能性があります。それらの現在の設定をどのようにして知ることができますか?上書きする前に値を確認する必要がありますよね?

何かご意見は?

関連リンク:SOの別のスレッド の人々は試行錯誤のアプローチを提案しましたが、これは理想的ではありません。

よろしくお願いします。

17
Michael Mao

jinfo.exeユーティリティを使用して、実行中のJVMのJVMフラグの値を確認できます。

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

-XX:PermSize JVMオプションの値を確認するには、次のコマンドを実行します

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

41
Strelok

ここ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です。

22
Alan

VisualVMのようなもの http://Java.dzone.com/articles/best-kept-secret-jdk-visualvm&default=false&zid=159&browser=16&mid=0&refresh= を使用して、メモリを監視できます使用量と、最大値がピークになる場所がわかり、メモリのどの部分が実際にいっぱいであるかに関する特定の情報が得られるので、環境をより最適化できます。

考えていないメモリの一部が実際にいっぱいになっていることに気づくかもしれません。それを監視することで、パフォーマンスを向上させるために必要なことを確認できます。

7
James Black

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

上記の考えられる原因はほとんどなく、そのうちの1つは https://www.permeance.com.au/webで説明されているJava.io.tmpdirの明示的な宣言である可能性があります。 /terry.mueller/home/-/blogs/unable-to-open-socket-file-target-process-not-responding-or-hotspot-vm-not-loaded

4
Jacek