あなたはドッカーリソースの制約を知らないかもしれません

リソース制限とは何ですか?

  デフォルトでは、コンテナリソースの制約が存在しない、それに割り当てられたリソースの可能なホストとして限り使用することができます。ドッカーはドッカー実行またはドッカーコマンドを作成する時に実行するように設定されたフラグによって構成どのくらい割り当てられたメモリ、CPU、又は容器の形態にI / Oをブロックする、すなわち、制御が提供されます。
これらの機能の多くは、あなたがLinuxカーネルの機能をサポートするのに必要な、あなたはカーネルが機能を無効にする場合はドッキングウィンドウinfoコマンドによってサポートは、あなたが以下で警告を受けることができるかどうかを確認することができます。
ドッキングウィンドウ-情報
  Linuxホストで、システムの重要な機能を実行するための十分なメモリを持っていないカーネルで検出された場合、それは(メモリ不足の例外)OOME、一度Linuxはメモリを解放するプロセスを殺す開始します、起こるOOMEをスローします。すべてのプロセスは、ドッキングウィンドウデーモンおよびその他の重要なアプリケーションを含む、殺される可能性が高いです。間違ったプロセスが殺されている場合、それはシステム全体の使用の影響を低減することができます。

ドッキングウィンドウは、メモリの使用を制限します

  容器上の制限を課すことができるドッカーで使用されるリソースの制約は、容器の即ちのみ使用は、システムメモリ又は所定数の他のソフト制限を超えることはありません。ドッキングウィンドウの実行またはドッキングウィンドウコンテナを制限するリソース使用制限のためのコンテナを作成作成するときにここでは最も一般的なオプションのいくつかは、我々が指定することができます。
オプション
説明
-m或-memory =
容器に使用することができるメモリの最大量。このオプションを設定すると、最小許容値は、4メートル(4メガバイト)です。
--memory・スワップ
これは、ディスクへのメモリのコンテナ交換量を可能にします。
--kernel-メモリ
メモリの最大量は、容器のカーネルは、最小値4メートル(4メガバイト)を可能にする、使用することができます。カーネルメモリをスワップアウトすることができないので、カーネルメモリコンテナの欠如は、他の船舶のホストを持っており、副作用を引き起こす可能性があるリソースのホストを、ブロックすることがありますので。

ドッカーCPUの使用制限

  デフォルトでは、ホストCPUサイクルにアクセスするための各コンテナは無制限です。私たちは、与えられたコンテナのホストCPUサイクルへのアクセスを制限する様々な制約を設定することができます。ほとんどのユーザーが使用してCFSスケジューラー(デフォルト)またはリアルタイムスケジューラを設定します。ここではCPU用の容器の使用を制限するために、デフォルトのCFSのスケジューラを設定するには、いくつかの一般的なオプションがあります。
オプション
説明
--cpus = <値>
コンテナを指定可能なCPUリソースの量は、例えば、4つのホストCPUがあり、使用することができる、あなたは、3.5 CPUコンテナの限界最大のコンテナ--cpus =「3.5」を設定することができます。
--cpuset-のCPU
特定のCPUコア又はコンテナに制限を使用することができる、例えば、4つのホストCPUがあり、あなたが--cpuset-のCPU =「1,3」に設けられた容器を与えることができ、容器のみ第二及び第四のCPUを使用して制限されています。

ドッカーリソースの制約を確認してください

  (1)閲覧ホストリソース情報
lscpu
無料 -h
図から分かるように、私は(個人用)クラウドサーバーのこの構成を買う余裕ができ、貧しい力です
  (2)圧力感知された画像を引っ張ります
ドッキングウィンドウプルlorel /ドッキングウィンドウストレス-NG
  :ドッキングウィンドウストレス-ngのハブドッカーの公式ドキュメントを参照してくださいミラーリング方法については https://hub.docker.com/r/lorel/docker-stress-ng/
  あなたは、使用ドッキングウィンドウストレス-NGを表示したい場合は(3)、あなたはヘルプオプション--help意味を取得するには、次のコマンドを使用することができます
ドッキングウィンドウは、--nameストレス実行- RM lorel /ドッキングウィンドウストレス-NG:最新のストレスを--help
 
  ヘルプドキュメントには、例を示します:
stress-ng --cpu 8 --io 4 --vm 2 --vm-bytes 128M --fork 4 --timeout 10s
  下面是它的重要选项的说明:
  • -c N, --cpu N 启动 N 个子进程( cpu )
  • --vm N 启动 N 个进程对内存进行压测
  • --vm-bytes 128M 每个子进程使用多少内存(默认 256M )
  (4)测试内存使用限制
docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress --vm 2
  说明:
  • 限制内存使用最多256M
  • 开启压测启动2个进程,每个进程使用256M(默认值)
  验证:
docker stats stress
 
  可以看到,无论启动多少个使用256M的进程做压测(这里启动了2个进程,按理会使用512MB内存),stress容器的最大内存使用量始终维持在256MB。
  (5)测试CPU使用限制
docker run --name stress --rm --cpus 1 lorel/docker-stress-ng:latest stress --cpu 4
  这里由于我的宿主机只有2个CPU,因此这里限制stress容器只能使用最多1个CPU,但是压测进程可以使用4个CPU。
  验证:
docker stats stress
 
  可以看到,无论压测的进程被允许使用多少个CPU,stress的CPU使用量始终在100%左右(存在一定误差是正常的)。
那么,如果我们不限制CPU呢?
docker run --name stress --rm lorel/docker-stress-ng:latest stress --cpu 4
 
  从上图可知,stress容器会尽可能地吃掉尽可能多的CPU资源,由于宿主机只有2个CPU,因此原则上不会使用超过200%的CPU(当然,也会存在一定的误差,正常的)

小结

  本文探索了Docker的资源限制相关知识,在日常开发中应该给容器设置一个合理的资源限制值,以防出现OOME的情况导致Linux杀掉错误的进程。

参考资料

(1)马哥,《Docker资源限制及验证》
(2)阿龙,《 Docker的系统资源限制详解

おすすめ

転載: www.cnblogs.com/edisonchou/p/docker_resource_limitation_introduction.html