2017-08-22 12 views
0

ドッカーの統計結果を使用して、CPU使用率が100%を超えるコンテナをどのように殺すかを試してみること。私は、ファイルに統計をエクスポートし、結果を見て、100%を超えるCPUを持つコンテナIDを探して、40%のコンテナを殺しているように見えます。結果は00.00%の形式で返されますが、ファイル内の%と比較してawkが数値をどのように見ているかはわかりません。ドッカーの統計結果を使用してコンテナを殺す

#!/bin/bash 
docker stats --no-stream > /tmp/cpu.log 

sed -i 's/CONTAINER//g' /tmp/cpu.log 

KILLCPU=$(awk '$2 >= 11000 {print$1}' /tmp/cpu.log) 

docker stop $KILLCPU 

答えて

0

awkが正しく割合を認識してもらうためにフィールドに+0を追加します。

KILLCPU=$(awk '$2+0 >= 110 {print$1}' /tmp/cpu.log) 
0

コンテナが> 100%CPUを使用する場合、複数のCPUで実行されています。彼らが特定のパーセンテージに達したためにそれらを殺すことは正しいアプローチではありません。

私はあなたが実行をドッカーする--cpu-sharesオプションを使用することをお勧め:

参照:デフォルトでは

https://docs.docker.com/engine/reference/run/#cpu-share-constraint

CPUシェアの制約、すべてのコンテナがCPUサイクルの同じ 割合を取得します。この比率は、 コンテナのCPUシェアの重み付けを、他の実行中のコンテナのすべての重み付けの値に変更することで変更できます。

デフォルトの1024からの比率を変更するには、-cまたは --cpu-sharesフラグを使用して、重み付けを2以上に設定します。 0が設定されている場合、システムは値を無視してデフォルトの1024を使用します。

この割合は、CPU集約型プロセスが実行中の場合にのみ適用されます。 1つのコンテナ内のタスクがアイドル状態の場合、残りのコンテナはCPU時間を残して使用することができます。 実際のCPU時間は、システム上で実行されているコンテナの数によって異なります( )。例えば

、3つの容器を考慮し、一つは1024の 二他のCPUシェアを有する全て 3つの容器の処理はCPUの100%、第一の容器を使用しようとすると512のCPUシェアの設定を持っています は合計CPU時間の50%を受け取ります。 のcpu-shareを持つ4番目のコンテナを追加すると、最初のコンテナはCPUの33%しか取得しません。 残りのコンテナは、CPUの16.5%、16.5%、および33%を受け取ります。

マルチコアシステムでは、CPU時間のシェアはすべて すべてのCPUコアに分散されています。コンテナがCPU の100%未満に制限されていても、個々のCPUコアの100%を使用できます。

たとえば、3つ以上のコアを持つシステムを考えてみましょう。あなたが-C = 1024の2つの処理を実行して-C = 512は、一つのプロセスを実行すると、ワン容器{C0}を起動し、別の 容器{C1} 場合、これはCPUシェアの 次の分割をもたらすことができる:

PID container CPU CPU share 
100 {C0}  0 100% of CPU0 
101 {C1}  1 100% of CPU1 
102 {C1}  2 100% of CPU2 
関連する問題