私はjavaフレームワークのようなマイクロサービスを持っています。多くのJavaプロセスは単一のボックス(ubuntu 14.04.4 LTS)で動作します。 Javaプロセスは多くのシステムメモリを使用しているため、スワップ領域が頻繁に使用されます。 jstat gcのレポートでは、システムのメモリ使用量については説明していません。すべてのJavaプロセスは、システムに戻すメモリを与えるためにJVMを強制的にヒープ使用と比較して、Javaアプリケーションの巨大なシステムメモリ使用量
-XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90
パラメータを使用して実行します。パラメータがなければ問題は解決されません。一部のJavaコンポーネントは、nashornエンジンを使用していくつかの機能をスクリプト化します。
ここで行動を説明できる人はいますか?
巨大なシステムメモリの使用を制限するjvmの値はありますか?
jvmのメモリ割り当てを制限する方法をOSに指示する方法はありますか?
一部のデータ:
成分A(nashorn有する)
トップ:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2400 xxxxxx 20 0 13.933g 807496 7332 S 0.0 2.5 4180:15 java
2400 -gc JSTAT:
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
512.0 512.0 0.0 400.0 19456.0 12751.6 62464.0 59862.3 89688.0 84866.6 10624.0 9440.4 2165265 15977.896 16816 1813.836 17791.732
- 容量:約180 MB
- 使用法:ca. 165 MB
- システムリソース:ca. 800 MB
なぜコンポーネントはGC領域の4倍のメモリを使用しますか?
成分B
トップ(nashornなし):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19476 xxxx 20 0 13.465g 120436 7836 S 7.0 0.4 22:40.76 java
JSTAT 19476 -gc:
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
512.0 512.0 0.0 0.0 41472.0 25408.7 343040.0 7164.5 17664.0 17183.1 2048.0 1919.4 3650 10.806 939 16.788 27.594
- 容量:約403 MB
- 使用法:ca. 52メガバイト
- システムリソース:120メガバイトここ
はGC面積容量は、実際のシステムのメモリ使用量よりも大きくしています。それでもシステムのメモリ使用量はGC領域の2倍です。 IMOこのコンポーネントはライブラリなどが部分的にメモリにもマップされているので正常に動作します。(nashornなし)
成分C
トップ:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2272 xxxxxx 20 0 13.382g 922944 11108 S 0.7 2.8 40033:41 java
JSTAT -gc 2272:
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1024.0 1024.0 868.0 0.0 36352.0 23866.1 76800.0 56580.2 68864.0 64571.1 8448.0 7460.6 31974159 199295.501 844692 134644.040 333939.541
- 容量:約190 MB
- 使用法:ca. 152メガバイト
- システムリソース:920メガバイト
成分がより6倍GC領域のメモリを使用しない理由?
私は知っているが、それでもなお役に立たない。あなたは分散コンピューティングの最初のルールを知っていますか? *コンピューティングを配布しない*。私は、小さなサービスをたくさん持っていると多くの問題を解決できることを理解していますが、それはあなたの環境に合わせて調整するべきではありません。私はちょっと、あなたが最終的にそのような問題に遭遇する(同じノード上にある)非常に多くの異なるJVMを使用するというアイデアを得ることはできません...正解は複数のノードを使うか、 – GhostCat
私は答えを見てお勧めします:http://stackoverflow.com/questions/14763079/what-are-the-xms-and-xmx-parameters-when-starting-jvms –
これは、 linux/ubuntu上のメモリ管理.Windows上で実行すると、私はそれらの問題を観察しません。 Xmx/Xmsフラグはヒープサイズを制限しますが、システムメモリの使用に与える影響は少なくなります。 –