2016-11-13 14 views
0

私はシェルスクリプトには比較的新しいので、bashを使って独自のヘルスチェックスクリプトを作成しています。これは、シェルスクリプトを使用してCPU負荷をテストするより速い方法ですか?

パフォーマンス、可読性、および保守性に関して、CPU負荷をテストする次のスクリプトはありますか?

#!/bin/sh 

getloadavg5() { 
    echo $(cat /proc/loadavg | cut -f2 -d' ') 
} 

getnumcpus() { 
    echo $(cat /proc/cpuinfo | grep '^processor' | wc -l) 
} 

awk \ 
    -v failthold=0.8 \ 
    -v warnthold=0.7 \ 
    -v loadavg=$(getloadavg5) \ 
    -v numcpus=$(getnumcpus) \ 
    'BEGIN { 
    ratio=loadavg/numcpus 
    if (ratio >= failthold) exit 2 
    if (ratio >= warnthold) exit 1 
    exit 0 
    }' 
+0

Re:パフォーマンス、可読性、および保守性の点で最高です。私は「いいえ」と言います。 –

+0

あなたはもっと教えてくれますか? –

+1

あなたが実際にやろうとしていることは明らかではありません。あなたの質問に表示されているコマンドから引き出された値は、マシンが何らかの瞬間に何をしているのかを垣間見るだけのものです。 2番目のコマンドは単なる情報であり、活発に変化していません。 –

答えて

2

これはcode review stackexchangeのために、より適しているかもしれませんが、このように負荷平均の使用を容認せず、ここではいくつかのアイデアです:

#!/bin/sh 
read -r one five fifteen rest < /proc/loadavg 
cpus=$(grep -c '^processor' /proc/cpuinfo) 

awk \ 
    -v failthold=0.8 \ 
    -v warnthold=0.7 \ 
    -v loadavg="$five" \ 
    -v numcpus="$cpus" \ 
    'BEGIN { 
    ratio=loadavg/numcpus 
    if (ratio >= failthold) exit 2 
    if (ratio >= warnthold) exit 1 
    exit 0 
    }' 

それは不必要な猫のいずれかを持っていません/エコー。

〜10の代わりに(シェルに応じて)1回または2回フォークした方が速く実行されますが、パフォーマンスが問題であればシェルスクリプトは一般的には避けてください。

+0

ご返信ありがとうございます。それが私が探していたものです。インフラストラクチャの任意のVMで間隔を置いて実行される一連のヘルスチェックを実装するために使用するテクノロジはどれですか? –

関連する問題