Dockerの資源管理について(CPU、メモリ)

2020/06/09 What's Up, ネットワーク, 技術系 投稿者:

1台の物理サーバ上で複数のDockerコンテナが稼働する環境では、限られたハードウェア資源の利用制限は非常に重要です。
特定のユーザーが使用するコンテナがホストマシンのハードウェア資源を食いつぶすようなことがあれば、他のユーザーのハードウェア資源の利用に支障をきたします。
こうしたことを防ぐためにDockerでは、CPU、メモリ、ディスク、ネットワーク等の資源を管理する仕組みが備わっています。
今回はCPUとメモリの利用制限の方法を紹介したいと思います。

DockerのCPU資源管理

Dockerは、1つのCPUコアを複数のコンテナで利用しますが、そのCPUを割り当てる時間の割合をコンテナ実行時に指定するという方法を採っています。そしてコンテナにはCPUの割当時間の割合を示すための相対値が与えられています。

CPUの資源管理の例

それぞれのコンテナのCPUの相対値には、標準では1024という値が割り当てられるのですが、いくつか具体的な例を示します。

例1

1コアのCPUに3つのコンテナが稼働しており、コンテナ1、コンテナ2、コンテナ3にそれぞれ1024という値を指定しているとします。
この場合、すべて同じ値ですので、CPU時間は、均等に割り振られるという意味になります。
各コンテナに割り当てられるCPU時間は、100%の3等分で、約33.3%となります。

CPUの割当例1

コンテナ1 コンテナ2 コンテナ3
CPU割当時間の相対値 1024 1024 1024
CPU割当時間 約33.3% 約33.3% 約33.3%

例2

コンテナ1に1024、コンテナ2とコンテナ3には512という値を割り当てると、コンテナ2とコンテナ3には、コンテナ1に比べて半分の時間しかCPUが割り当てられません。

CPUの割当例2

コンテナ1 コンテナ2 コンテナ3
CPU割当時間の相対値 1024 512 512
CPU割当時間 50.0% 25.0% 25.0%

CPU割当時間の確認

先程の例で示したCPU割当時間を実際に確かめてみます。CPU割当時間の割合を確認するには、ホストOS上のtopコマンドでも確認出来ますが、ここではより視認性が高い、htopコマンドを使って確かめてみましょう。

htopのインストール

htopはEPELリポジトリで提供されていますので、ホストOSにリポジトリを追加し、htopをインストールします。

CPUの割当時間の設定:例1

ここで利用するDockerイメージは、CentOS 7.5.1804のOSテンプレートのDockerイメージです。

入手していない場合には、事前にdocker image pullで入手しておいてください。

それでは実際に例1を確認します。CPU割当時間の値は、docker container run実行時に–cpu-sharesオプションを付与します。
cpu-sharesの数値を全て同じ1024にしてDockerコンテナを3つ稼働させます。

実行例のうち、–cpuset-cpus=0は、ホストOS側のCPUコアの番号を指定しています。こうすることで、3つのコンテナをCPUコア0番で固定して稼働させることが出来ます。

結果の確認:例1

htopコマンドで、結果を確認してみます。[F6]を押すと、項目別にソートできるので、[PERCENT_CPU]を選択し、Enterキーを押します。その後で上矢印キーを押し続け、CPU利用率の高いプロセスの上位を表示させます。

htopの結果の通り、CPUコア0番(htopの表示では1番のCPU)の負荷が高い状態になり、ddコマンドを実行している3つのプロセスの[CPU%]の値が、およそ33%前後になっていることがわかります。

CPUの割当時間の設定:例2

続いて例2を確認します。cpu-sharesの数値を変えてDockerコンテナを3つ稼働させます。

結果の確認:例2

htopコマンドで、結果を確認してみます。

htopの結果の通りddコマンドを実行している3つのプロセスの[CPU%]の値が、およそ50%と25%前後になっていることがわかります。

以上がCPUの資源管理(割当変更)の方法となります。

CPUコアの変更

次にDockerコンテナに割り当てられるコア自体の変更方法について説明します。Dockerコンテナ起動時のオプション–cpuset-cpus=XXで、Dockerコンテナに割り当てるCPUコアを指定することが可能です。また、docker container updateコマンドを利用すれば、稼働中のDockerコンテナに割り当てられたCPUコアを変更することも可能です。

CPUコアの指定 例
–cpuset-cpus 0  #CPUコア0を使用
–cpuset-cpus 0-2 #CPUコア0~2を使用
–cpuset-cpus 1,2 #CPUコア1と2を使用

CPUコアの割り当て確認

稼働中のDockerコンテナに割り当てられたCPUコアを確認するには、docker container inspectコマンドを利用します。コンテナ名core01に割り当てられたCPUコアを確認する場合には下記のようなコマンドになります。

現在、コア0が割り当てられていることが分かりました。

CPUコアの割り当て変更

稼働中のDockerコンテナに割り当てられたCPUコアを変更するには、docker container updateコマンドを利用します。コンテナ名core01に割り当てられたCPUコアを1に変更する場合には下記のようなコマンドになります。

割り当てられたコアを確認すると変更されていることが確認出来るはずです。

DockerのCPU資源管理の手順は以上となります。

メモリ容量の制限

Dockerのメモリ資源管理は、Dockerコンテナが使用できる最大メモリ容量を-mオプションで指定することで行います。単位には、b(バイト)、k(キロバイト)、m(メガバイト)、g(ギガバイト)を指定出来ます。

以下は、最大512Mバイトのメモリ容量までが利用可能なDockerコンテナmem01を起動する例です。

コンソールにログインするため、-itdでなく-itとします。
-dはバックグラウンドで稼働させるためのオプションです。

メモリ容量制限のテスト

稼働中のDockerコンテナのメモリ容量が制限されているかどうかは、コンテナで、メモリ使用率を上昇させるプログラムを稼働させることで確認出来ます。メモリ使用率を上昇させるには、yesコマンドを使って、bashプロセスのメモリ使用率を徐々に上げていく方法がありますのでそれを使います。

Docker コンテナ mem01のメモリ容量は、[512Mバイト]に制限されている為、htopの画面のRES列に表示されるメモリ使用量が上限の512Mになっていることが確認出来るはずです。

DockerにおけるCPUとメモリの資源管理の説明は以上です。

比較的手軽に始められるのがDockerの魅力ですが、本格的な運用をしていく場合には今回紹介した容量制限のテクニックが必要になってくるはずです。
資源が足りなくなって、後から調整に苦労した。ということにならないように資源管理は計画的に行いましょう。

カレンダー

    123
45678910
11121314151617
18192021222324
25262728293031
       
   1234
567891011
12131415161718
19202122232425
26272829   
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
1234567
891011121314
15161718192021
22232425262728
       
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
     12
3456789
10111213141516
17181920212223
24252627282930
31      
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
     12
3456789
10111213141516
17181920212223
242526272829 
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
    123
45678910
11121314151617
18192021222324
25262728   
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
   1234
567891011
12131415161718
19202122232425
262728    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
     12
3456789
10111213141516
17181920212223
24252627282930
31      
   1234
567891011
12131415161718
19202122232425
2627282930  
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728     
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
1234567
891011121314
15161718192021
22232425262728
29      
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
  12345
6789101112
13141516171819
20212223242526
27282930   
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
      1
2345678
9101112131415
16171819202122
232425262728 
       
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
     12
3456789
10111213141516
17181920212223
24252627282930
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
1234567
891011121314
15161718192021
22232425262728
2930     
       
    123
45678910
11121314151617
18192021222324
25262728293031
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
 123456
78910111213
14151617181920
21222324252627
282930    
       
     12
3456789
10111213141516
17181920212223
2425262728  
       
  12345
6789101112
13141516171819
20212223242526
2728293031  
       
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
    123
45678910
11121314151617
18192021222324
252627282930 
       
 123456
78910111213
14151617181920
21222324252627
28293031   
       
      1
2345678
9101112131415
16171819202122
23242526272829
30      
   1234
567891011
12131415161718
19202122232425
262728293031 
       
1234567
891011121314
15161718192021
22232425262728
293031    
       
U・Iターン転職しませんか?
群馬データセンター
群馬の法人ITサポートサービス Wide Net[ワイドネット]
Wide Netのクラウドバックアップ
クラウド型ファイル共有サービスRushDrive
ワイドオフィス