4

JavaWebアプリケーションのメモリ使用量について質問があります。

タスクマネージャでは、Tomcatサービスは8,677,544,000バイトのメモリを占有しているようです

jvisualvmでは、そのTomcatの下にデプロイされたJavaアプリケーションのメモリ使用量は次のとおりです。

Heap: 
Used: 2,304,233,184 B
Size: 8,589,934,592 B
Max: 10,737,418,240 B

Permgen:
Used:  80,272,056 B
Size: 536,870,912 B
Max:  536,870,912 B

TomcatのService.batファイルのメモリパラメータ:

-Xms8192m;-Xmx10240m;-XX:PermSize=512m;-XX:MaxPermSize=512m

さて、私の質問は、MaxHeapFreeRatioを何に設定しても、使用済みスペースが時々縮小していても、空きスペースが縮小しないことです。

誰か、親切にこれがこのように動作する理由を教えてもらえますか..システム上で実行されている他のプロセスがそれを利用できるように空き領域を縮小する方法はありますか?

最新バージョンのJDK1.7とTomcat7を使用しています。

4

1 に答える 1

3

このパラメーター-Xms8192mを使用して、Tomcat(JVM)に起動時に少なくとも8GiBのヒープスペースを割り当てるように指示します。

JVisualVM統計はそれをサポートしていますが、アプリケーションで約2GiBが使用されていることも示しています。

起動値を低い値に減らします(2 GiBから開始)。アプリケーションがより多くのヒープスペースを必要とする場合は、最大10 GiBを使用できると言っている-Xmx10240mので、この値も(おそらく4 GiBに)減らす価値があるかもしれないことに注意してください。

明らかに、OOMEを取得し始めた場合は、アプリケーションが正常に実行できるようになるまで値を増やす必要があります(メモリリークなどがないと仮定します)。

また、プロセスサイズは常にヒープサイズよりも大きくなることに注意してください。これには、perm genスペース(-XX:MaxPermSize=512m)とJVM自体の内部メモリ/ライブラリも含まれるためです。


基本的な例:

-Xms512m;-Xmx1536m;-XX:PermSize=64m;-XX:MaxPermSize=256m

ここでの最小値は512MiBヒープ、64 MiB perm genであるため、最小OSプロセスサイズは約600〜650MiBになります。

アプリケーションが最大値(1.5 GiBヒープ、256 MiB perm gen)までより多くのスペースを割り当てると、プロセスサイズは約2GiBに達すると予想されます。

ここで、あなたの値を使用する場合:

-Xms8192m;-Xmx10240m;-XX:PermSize=512m;-XX:MaxPermSize=512m

ここでの最小値は8GiBヒープ、512 MiB perm genであるため、OSプロセスの最小サイズは約8.6GiBになります。

最大値を使用すると、プロセスサイズはほぼ11GiBに達します。

于 2012-10-06T09:30:40.910 に答える