CPU使用量を確認し、80%を超える場合はコマンドを実行してください。

CPU使用量を確認し、80%を超える場合はコマンドを実行してください。

私のVPSは何度もハッキングされ、ハッカーはここにCPU採掘機をインストールしました。マイナーが検出され、12時間以内に応答しない場合、ホスティングプロバイダはVPSを終了します。しかし、土曜日の夜21時に通知を送信することができます:)日曜日の午前9時にサーバーをシャットダウンすることができます。

そのため、CPU使用率と採掘者が常に書き込むブロックフォルダを監視したいと思います。

私はLinuxに慣れていないので、このようなスクリプトを提案してください。

  1. CPU使用量を確認し、80%を超える場合(たとえば)対処してください。
  2. 私の場合は、インストールフォルダからすべてのエントリを削除して読み取り専用にしました。

実際には、項目1を実装する方法がわかりません。

答え1

同様の問題があり、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

答え2

CPU使用量を確認し、80%を超える場合(たとえば)対処してください。

最新のCPUにはマルチコアがあり、各コアは通常マルチスレッドをサポートしています。さらに、コアはしばしば可変クロック速度を有する。もしそうなら、CPU負荷を計算する方法を定義するのはそれほど簡単ではありません。単一のvCPUは、特定の時間に100%アイドル状態または100%使用中である可能性があることは言うまでもありません。 CPUが一時的に80%まで使用される状況はありません。

時間の経過とともに、vCPUあたりの平均負荷(mpstat提供)または結合されたすべてのvCPUの平均(vmstat)を取得できます。

完全にCPUバインドされていても、敵対的なCPU消費者がシングルスレッドの場合、後者の場合、他のvCPUはアイドル状態になる可能性があるため、目立つように見えない可能性があります。

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

別の有用な指標は、vCPU リソースを使用し、競合するスレッド数を測定する CPU 競合に由来します。これが負荷平均が表示したいものです。残念ながら、Linuxでは負荷平均がスレッド無停電状態をCPU負荷と見なしますが、実際にはCPUがアイドル状態で他のタスクを実行できるため、この要因に注意して負荷平均は高くなりますが、実際の競合が発生する状況を特定する必要があります。可能性の低い状況を使用してください。

最後に、実行キューは非常に高いですが、時間が非常に限られた状況がある可能性があります。実行キュー値を取得するためにサンプリングを使用する負荷平均計算がこのピークの瞬間に数値を取ると、負荷平均は数分または数十分間深刻に歪みます。

関連情報