web-dev-qa-db-ja.com

CPU使用率を取得し、80%を超える場合はコマンドを実行する

私のVPSは何度かハッキングされ、ハッカーはCPUマイナーを配置しました。マイナーが検出され、その後12時間反応しなかった場合、ホスティングプロバイダーはVPSをシャットダウンします。しかし、彼らは私に21.00 PM)に通知を送信し、日曜日の午前9時にサーバーをシャットダウンすることができます。

だから私はCPU使用率とブロックフォルダーを監視したいと思います。

私はLinuxにあまり詳しくないので、そのようなスクリプトで提案してください

  1. CPU使用率が80%を超えているかどうかを確認します(例)。
  2. 私の場合-インストールフォルダーからすべてを削除し、読み取り専用にします。

実際、アイテム№1を実装する方法がわかりません。

5
Alexey Shatrov

私にも同様の問題があり、この短いbashスクリプトは既に実行されていました。過去15分間の負荷平均を計算しています。別の時間枠が必要な場合は、変更する必要があります(過去5分間の負荷平均を確認するには、awkprint $1に変更します)。
これにより、CPUの相対的な使用状況がわかります。

#!/bin/bash
cores=$(nproc) 
load=$(awk '{print $3}'< /proc/loadavg)
echo | awk -v c="${cores}" -v l="${load}" '{print "relative load is " l*100/c "%"}'

UbuntuとCentosで実行する必要があります。

負荷が80%を超えているかどうかを確認して「何かを行う」ポイントに到達するには、次のスクリプトに追加する必要があります。

usage=$(echo | awk -v c="${cores}" -v l="${load}" '{print l*100/c}' | awk -F. '{print $1}')
if [[ ${usage} -ge 80 ]]; then
    echo "delete all from install folder and make it read only"
fi
5
mazs

CPU使用率が80%を超えているかどうかを確認します(例)。

最近のCPUには複数のコアがあり、多くの場合、各コアは複数のスレッドをサポートしています。さらに、コアのクロック速度はさまざまです。その場合、CPU負荷の計算方法を定義するのはそれほど簡単ではありません。言うまでもなく、単一のvCPUは、常に100%アイドルまたは100%ビジーのいずれかになります。瞬間的に80%ビジー状態のCPUなどはありません。

実行できることは、一定期間の各vCPUの平均負荷(mpstatが提供する)またはすべてのvCPUの合計(vmstat)の平均を取得することです。

完全にCPUにバインドされていても、敵意のあるCPUコンシューマーがシングルスレッドの場合、他のvCPUがアイドル状態になっている可能性があるため、後者の場合は露骨に表示されないことがあります。

マルチスレッドでCPUがバインドされている場合、両方のコマンドで検出されますが、マシンにロードしている正当なアプリケーションやデーモンではないことを確認する必要があります。

もう1つのより有用なメトリックは、CPUの競合、つまり、vCPUリソースを使用して競合しているスレッドの数を測定することから得られます。これは、負荷平均が示すように設計されているものです。残念ながら、Linuxでは、負荷平均はスレッドの割り込み不可能な状態をCPU負荷と見なしていますが、実際には、CPUはアイドル状態で他のタスクを自由に実行できるため、その要因に注意を払い、負荷平均が高い潜在的なケースを特定する必要がありますしかし、実際の競合は低いです。

最後に、実行キューが非常に高いが、非常に限られた期間である場合があります。サンプリングを使用して実行キュー値を取得する負荷平均の計算で、このまさにピークの瞬間に数値が選択されると、負荷平均値は数分または数十分の間強くバイアスされます。

0
jlliagre