GNU/Linux >> Linux の 問題 >  >> Ubuntu

DockerのメモリとCPU使用率の制限を設定する方法

はじめに

デフォルトでは、DockerコンテナはホストのRAMおよびCPUリソース全体にアクセスできます。これらのデフォルト設定で実行したままにすると、パフォーマンスのボトルネックが発生する可能性があります。

DockerのメモリとCPU使用率を制限しない場合、Dockerはすべてのシステムリソースを使用できます。

このチュートリアルでは、DockerコンテナのメモリとCPU使用率を制限する方法を学びます。

リソースの制限を有効にするようにシステムを構成する

リソースが限られているコンテナを実行する前に、システムがこのDockerオプションをサポートしているかどうかを確認してください。このガイドでは、Ubuntuでこれを行う方法と、必要に応じてこの機能を有効にする方法について説明します。

1.まず、次のコマンドを実行します:

sudo docker info

出力を受け取った場合WARNING: No swap limit support 、リソースの制限はデフォルトでは有効になっていません。

2.このオプションを追加するには、grub構成ファイルを編集します。選択したテキストエディタでファイルを開きます(nanoを使用しています):

sudo nano /etc/default/grub

3.次に、次の行を追加します。

GRUB_CMDLINE_LINUX="cdgroup_enable=memory swapaccount=1"

4.変更を保存して、ファイルを終了します。

5.次に、次のコマンドを使用してgrub構成を更新します。

sudo update-grub

6.最後に、変更を行うためにマシンを再起動します。

7. docker infoを再実行して、特定のDocker機能が正常に有効になったことを確認します コマンド。

Dockerコンテナのメモリアクセスを制限する

Dockerコンテナに設定できるRAMの制限がいくつかあります。それらのいくつかは次のとおりです。

  • コンテナが使用できるメモリの最大量を設定します。
  • Dockerコンテナがディスクにスワップできるメモリの量を定義します。
  • コンテナに割り当てられるメモリ量のソフト制限を設定します。

以下で、Dockerのメモリ制限を構成する方法を確認してください。

最大メモリアクセスの設定

コンテナのメモリ使用量の最大量を制限するには、 --memoryを追加します docker runのオプション 指図。または、ショートカット -mを使用することもできます

コマンド内で、その特定のコンテナーに割り当てるメモリの量を指定します。

コマンドは次の構文に従う必要があります:

sudo docker run -it --memory="[memory_limit]" [docker_image]

memory_limitの値 正の整数の後に接尾辞bを付ける必要があります 、 k m 、または g (バイト、キロバイト、メガバイト、またはギガバイトの略)。たとえば、1 GBのRAMを搭載したコンテナを制限するには、 --memory="1g"を追加します。

たとえば、Ubuntuコンテナのインスタンスを実行し、メモリ制限を1 GBに設定するには、コマンドは次のとおりです。

sudo docker run -it --memory="1g" ubuntu

スワップをディスクメモリ制限に設定

swapを使用する オプションを使用すると、コンテナに割り当てられたすべてのRAMが使い果たされた後でもデータを保存できます。これは、メモリの制限を無視し、ディスクに直接書き込むことによって行われます。これは便利な機能ですが、パフォーマンスが低下するため、お勧めしません。

この追加のRAMスペースを構成するには、スワップメモリ​​の合計量を定義します。これを行う前に、すでに最大メモリ( --memory)が必要です。 )非スワップメモリ​​セットの。スワップには、非スワップメモリ​​の合計量が含まれます プラススワップメモリ​​の量 バックアップとして予約されています。

たとえば、 --memoryを設定した場合 1 GB 、上記の例のように、スワップメモリ​​の量はそれより多くする必要があります。 追加でコンテナを実行するには 1 GB スワップメモリ​​の場合、スワップメモリ​​を 2 GBに設定します 。

限られたメモリと追加のスワップメモリ​​でコンテナを実行するための構文は次のとおりです。

sudo docker run -it --memory="[memory_limit]" --memory-swap="[memory_limit]" [docker_image]

たとえば、Ubuntuイメージからコンテナを実行し、使用するコンテナに1 GBのRAMを割り当て、スワップメモリ​​用に1 GBのRAMを予約するには、次のように入力します。

sudo docker run -it --memory="1g" --memory-swap="2g" ubuntu

ソフト制限をコンテナメモリに設定

--memoryを使用してコンテナのメモリ使用量を制限する 基本的に、超えられないハード制限を設定しています。または、ソフト制限を設定することもできます( --memory-reservation )コンテナが割り当てられたメモリの終わりに達したときに警告しますが、サービスは停止しません。

--memoryの場合 制限は設定されていません。--memory-reservationでソフト制限を設定します。 コンテナスペースを完全に制限するわけではありません。両方の機能を有効にしている場合、ソフト制限は常に最大スペース容量よりも低くなります。

例として、Ubuntuコンテナが 750 MBのメモリ予約を持つ場合 および1BGの最大RAM容量 、次のコマンドを使用します:

sudo docker run -it --memory="1g" --memory-reservation="750m" ubuntu

DockerコンテナのCPU使用率を制限する

RAMの使用量と同様に、DockerコンテナにはホストのCPUに対するデフォルトの制限はありません。コンテナに無制限のCPU使用率を与えると、問題が発生する可能性があります。

コンテナに割り当てるホストマシンのCPUリソースの量を定義する方法はいくつかあります。

たとえば、2つのCPUを搭載したホストがあり、そのうちの1つにコンテナアクセスを許可する場合は、オプション --cpus="1.0"を使用します。 。 1つのCPUにアクセスできるUbuntuコンテナを実行するためのコマンドは次のようになります。

sudo docker run -it --cpus="1.0" ubuntu

--cpu-sharesを使用することもできます コンテナにCPUサイクルの割合を増減させるオプション。デフォルトでは、これは 1024に設定されています 。

CPU共有が少ないコンテナを実行するには、次のコマンドを実行します。

sudo docker run -it --cpus-shares="700" ubuntu

コンテナのCPU使用率を制限するためのその他のオプションについては、Dockerの公式ドキュメントを参照してください。


Ubuntu
  1. lxc-execute でメモリと CPU を制限する

  2. アプリケーションのメモリ使用量を制限するには?

  3. Linuxでアプリケーションによるメモリ使用量を制限するには?

  1. LinuxでプロセスのCPU使用率を制限する方法

  2. メモリとCPU使用率で上位のプロセスを見つける方法

  3. パイプラインはメモリ使用量をどのように制限しますか?

  1. メモリとCPUの使用量で実行中のプロセスのトップ10を探す

  2. Linuxで単一プロセスのCPU使用率とメモリ使用率を取得しますか?

  3. CPU使用率を取得する方法