質問: Dockerのメモリ消費について質問させてください. ホスト:15.42GiB コンテナ:制限なし(ホストと同じ 15.42GiB) の環境でAndroidのCIをしているのですが,ビルド中のメモリ使用量を見ると以下のようになっています. | ホストtopの値 | コンテナのtopの値 | docker stats | | --- | --- | --- | | 4.381GiB | 13.342GiB | 8.089GiB | * コンテナのメモリ使用量が13GiBを超えているのにホストのメモリ使用量が5GiBに達していない理由 * docker stats のメモリ使用量は何を指しているのか * CIなので,ホストのメモリが余っていれば,よりコンテナでも利用してほしいが,その設定は可能なのか 公式ドキュメントなどでも,リソース制限に関する記述は見つかるのですが,上記のようなメモリ使用量になる理由を見つけられませんでした. Dockerの勉強不足なところはあるのですが,よろしくお願いします.
回答: docker stats の結果については、Docker のドキュメントに関連する記述がありました。 https://docs.docker.com/engine/reference/commandline/stats/ > > Note: On Linux, the Docker CLI reports memory usage by subtracting page cache usage from the total memory usage. The API does not perform such a calculation but rather provides the total memory usage and the amount from the page cache so that clients can use the data as nee > > > docker stats コマンドで出てくるメモリ使用量(MEM USAGE)の値とは、対象プロセスが実行中のメモリ使用量から、ページキャッシュを差し引いた値を表示しているとあります。 そのため、docker stat では、topでみたときよりも、メモリ使用量が少なくなって見えるのが一般的と考えられます。コンテナ(としてのプロセス)が13GiBを使用していたとしても、5GiBがページキャッシュであれば、差し引いた8GiBを使用中とdocker statコマンドで表示しています。 気になるのはホスト上でのtopとコンテナ内でのtopでの結果です。通常は同じですが(/proc/ > CIなので,ホストのメモリが余っていれば,よりコンテナでも利用してほしいが,その設定は可能なのか > > > はい、通常、コンテナに対するメモリ使用容量の制限がなければ、ホスト上のメモリを必要があれば利用します。