2016-04-06 10 views
3

Iました次のJVM引数を指定してJavaアプリケーション実行されているコンテナ:ドッカーは統計100%メモリ

docker run -it -m 2304m foo bash 

docker stats myAppを実行している:私はドッキングウィンドウのメモリ制限オプションを使用してい

-XX:+UseG1GC -Xms512m -Xmx2048m -XX:MaxPermSize=256m 

をコンテナの初期化の直後に私は:

CONTAINER CPU % MEM USAGE/LIMIT  MEM % NET I/O 
myApp  0.17% 660.5 MB/2.416 GB 27.34% 240.8 kB/133.4 kB 

しかし、数時間後に私はlowing統計:

CONTAINER CPU % MEM USAGE/LIMIT  MEM % NET I/O 
myApp  202.18% 2.416 GB/2.416 GB 100.00% 27.67 GB/19.49 GB 

私はコンテナ内で実行中のアプリケーションのプロセス実行の詳細に見てみると、私は~735MBの使用を持っているとて、myAppは何の問題もなく要求を計算するために続けて、けれども:

[email protected] ~]$ ps aux 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
me+   1 0.0 0.0 11636 1324 ?  Ss 13:44 0:00 /bin/bash /home/bar/service/start-myApp.sh 
me+   6 113 4.5 5014152 735736 ?  Sl 13:44 438:46 java -XX:+UseG1GC -Xms512m -Xmx2048m -XX:MaxPermSize=256m -jar myApp-service-1.0-final.jar 
me+  481 0.0 0.0 11768 1820 ?  Ss 20:09 0:00 bash 
me+  497 0.0 0.0 35888 1464 ?  R+ 20:10 0:00 ps aux 

私はjconsoleを使ってプロセス6を監視しています。

なぜコンテンツが必要でない場合、すべてのメモリを使用しているのですか? 私はドッカーがmyAppより少し多くのメモリを使用すると予想しました...利用可能なメモリの100%ではありません。

言う
-XX:+UseG1GC -Xms512m -Xmx2048m -XX:MaxPermSize=256m 

、また、0.25ギガバイトのpermgenヒープを0.5GBから始まり、2ギガバイトに成長することができ、およびヒープを使用します。

答えて

5

は、これを起動します。それには、JVMの他の非ヒープ使用法は含まれていません。例えばメモリマップされたファイル、スレッドスタック、キャッシュされたJARファイルなどが含まれています。

次に、ドッカーがコンテナが2.416 GBを使用していると報告しています。それは驚くべきことではない。 2.42 - 2.25は0.17GBであり、これはヒープ以外のメモリ使用では過度ではありません。

最後に、735736のRSS値が常駐セットのサイズを示しています。そのプロセスが使用している物理RAMの現在の量である。 JVM引数とドッカーのstatsコマンドは、仮想メモリサイズの測定値です。


その内容がそれを必要としない場合は、なぜ、すべてのメモリが使用可能に使用してドッキングウィンドウコンテナのですか?私はドッカーがmyAppよりも少しメモリを使用すると予想していました...利用可能なメモリの100%ではありません。

あなたはps auxの出力を誤解していると思います。 RSSは使用されている物理メモリだけです。実際、あなたのプロセスの総メモリ使用量はVSZによって与えられます。これは5GBです。今では> <が大きく見えますが、なぜそれが大きいのかは明らかではありません。しかし、これを額面に取ってみると、Dockerはであり、コンテナの真のメモリ/仮想メモリ使用量はです。

もう1つは、Dockerコンテナがコンテナ内のアプリケーションを、コンテナ外の他のものによるリソース要求から分離しないことです。 JVMは、コンテナの内部と外部の他のアプリケーションと物理RAMを競合します。詳細については

+0

Java 1.8を使用する場合、 '-XX:MaxPermSize'を' -XX:MaxMetaspaceSize = 128m'に置き換える必要があります。 – loretoparisi

+1

真...質問と私の回答の接線 –

+0

はい、私はそれを解決しようとしていたので、私はそれを見つけましたが、JVMはそれが廃止されたと訴える... – loretoparisi

関連する問題