私はホスト上のすべてのRAMを占有しないようにコンテナを制限しようとしています。 the Docker docsから、私は--memory
がRAMを制限し、--memory-swap
の制限(RAM +スワップ)を理解します。 the docker-compose docsからそれらのための用語がmem_limit
とmemswap_limit
ているように見えたので、私は、次のドッキングウィンドウ・コンファイルを構築しました:mockoc以上でドッキングすることができますmem_limit
> cat docker-compose.yml
version: "2"
services:
stress:
image: progrium/stress
command: '-m 1 --vm-bytes 15G --vm-hang 0 --timeout 10s'
mem_limit: 1g
memswap_limit: 2g
progrium/stress imageをちょうどこの場合には15ギガバイトを要求し、単一のスレッドを生成stress
を実行しますRAMに保存し、10秒間保持します。
私はこれがクラッシュすると思いますが、15> 2です。
カーネルがのcgroupが有効になっている(私はホストが持っているよりも多くのRAMを求める場合には、クラッシュん)、およびdocker stats
は限界が認識されていることを示しています
> docker stats
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O BLOCK I/O PIDS
7624a9605c70 0.00% 1024MiB/1GiB 99.99% 396B/0B 172kB/0B 2
だから何が起こっているのですか?実際にコンテナをどのように制限するのですか?
更新:RAMの使用量が効果的に(RAMの1GBのみが使用されている)限定されているようfree
を見て は、それが見えますが、スワップはありません:それはスワップの全てかかわらず食われるまでコンテナが徐々にスワップの使用量が増加しますstress
がクラッシュします(マシンに5GBのスワップを取得するのに約20秒かかります)。
アップデート2:かかわらずmemswap_limit
の、mem_limit
より多くのメモリを要求するときに mem_swappiness: 0
を設定するには、すぐにクラッシュが発生します。