18

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

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

すべてが機能しました:)

しかし、解決策についてよく考えてみると、間違いを犯した可能性があります。それらの現在の設定をどのように知ることができるでしょうか。それらをオーバーライドする前に、それらの値を確認する必要がありますよね?

何かご意見は?

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

よろしくお願いします。

4

4 に答える 4

42

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

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

-XX:PermSize実行できるJVMオプションの値を確認するには

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

于 2010-09-16T00:49:21.780 に答える
23

ここjmapで使用できるのは、JVM Heap Dump Tool です。

例えば:

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 を含む)。5900JavaのプロセスIDです。

于 2014-06-05T06:13:12.387 に答える
7

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

考えていないメモリの一部が実際にいっぱいになっていることに気付く場合があり、それを監視することで、パフォーマンスを向上させるために何をする必要があるかを知ることができます。

于 2010-09-16T00:48:20.567 に答える
4

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/terry.mueller/home/-/blogs/で説明されているように、 java.io.tmpdirの明示的な宣言である可能性があります。ソケット ファイルを開けないターゲット プロセスが応答しないまたはホットスポット VM がロードされていない

于 2014-03-31T09:02:02.260 に答える