2017-12-05 10 views
1

私はホスト上のすべてのRAMを占有しないようにコンテナを制限しようとしています。 the Docker docsから、私は--memoryがRAMを制限し、--memory-swapの制限(RAM +スワップ)を理解します。 the docker-compose docsからそれらのための用語がmem_limitmemswap_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を設定するには、すぐにクラッシュが発生します。

答えて

0

docker infoを実行すると、これはデフォルトでは無効になってhttps://docs.docker.com/engine/installation/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilitiesによるとWARNING: No swap limit support

を示し(「総利用可能なメモリと10%の全体的なパフォーマンス低下の約1%のオーバーヘッドが発生占めメモリとスワップ。」)することができます

次の二つのキーと値のペアを追加するGRUB_CMDLINE_LINUXの行を追加または編集します: GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" を、その後update-grubし、再起動してGRUBを更新/etc/default/grubファイルを編集して、それを有効にします。

関連する問題