あなたが長い間管理者であったなら、あなたは確かにサーバーがCPU使用率またはメモリ使用率および/または負荷レベルで急上昇する状況を発見しました。 `top`を実行しても、必ずしも答えが得られるとは限りません。では、システムリソースをかみ砕いて殺すことができる卑劣なプロセスをどのように見つけますか?
次のスクリプトが役立つ場合があります。これはWebサーバー用に作成されているため、httpdプロセスを特に探している部分とMySQLを処理する部分があります。サーバーの展開に応じて、これらのセクションをコメント化/削除し、他のセクションを追加するだけです。出発点として使用する必要があります。
このバージョンのスクリプトの前提条件は、mytopと呼ばれるGNU General Public Licenseの下でリリースされたフリーウェアです(で入手可能)
hっtp://じぇれmy。ざをdny。こm/mysql/myとp/
)これは、MySQLのパフォーマンスをチェックするための素晴らしいツールです。それは古くなっていますが、それでもここでの目的にはうまく機能します。
さらに、私はメーラーとしてmuttを使用しています。スクリプトを変更して、Linuxに組み込まれている `mail`ユーティリティを使用することもできます。私は1時間ごとにcron経由で実行します。必要に応じて調整してください。ああ–そしてこのスクリプトはサーバーのいくつかの保護された領域から読み取るのでrootとして実行する必要があります。
では、始めましょう。
まず、スクリプト変数を設定します。
#!/ビン/バッシュ
#
#システム負荷の平均レベルをチェックして決定を試みるスクリプト
#どのプロセスがそれを過度に高くしているのか...
#
#07Jul2010 tjones
#
#環境を設定する
dt = `日付+%d%b%Y-%X`
#明らかに、次のディレクトリをログファイルが実際に保存されている場所に変更します
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysql Log = "/ var / log / mysqld.log"
#最初のメールストップは、レポートの標準的なメールです。 2つ目は携帯電話用です(レポートが簡素化されています)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
machine = `hostname`
#次の3つはmytop用です-適切な権限を持つdbユーザーを使用してください
dbusr = "ユーザー名"
dbpw = "パスワード"
db = "yourdatabasename"
#以下はチェックする負荷レベルです-10は本当に高いので、それを下げることをお勧めします。
levelToCheck = 10
次に、負荷レベルをチェックして、スクリプトを続行する必要があるかどうかを確認します。
#システムから変数を設定します。
loadLevel = `cat / proc / loadavg | awk '{print $1}' `
loadLevel = $(printf "%0.f" $ loadLevel)#負荷レベルが必要以上に大きい場合は、スクリプトプロセスを開始します。それ以外の場合は、0を終了します
[ $loadLevel -gt $levelToCheck ]の場合;その後
エコー ""> $ tmpfile
エコー "**************************************" >> $ tmpfile
echo "日付:$ dt" >> $ tmpfile
echo "システムのロードとプロセスの確認" >> $ tmpfile
エコー "**************************************" >> $ tmpfile