Image

ナレッジベース → 高負荷を回避するための crontab スクリプトの設定

[仮想サーバー]
公開日: 27.01.2023

攻撃を防御できなかった場合や、他の理由でサーバーが高負荷で動作し始めた場合に備えて、スクリプトをインストールし、crontabサービスで毎分実行することをお勧めします。これにより、重大な負荷がかかっている際にサーバーへのアクセスが失われるのを防ぎ、状況を解消するための対策を講じることができます。

/etc/cron.daily/load-average-2.sh

#!/bin/bash

loadavg=`uptime | awk '{print $10+0}'`
# bashは浮動小数点を理解しないため
# 数値を整数に変換する
thisloadavg=`echo $loadavg|awk -F \. '{print $1}'`
if [ "$thisloadavg" -ge "2" ]; then
echo "Busy - Load Average $loadavg ($thisloadavg) "
echo 'Warning - Load AVG (my.server.tld) on:' `date` `uptime` | mailx -s "Warning: LA from `uptime | cut -d'(' -f2 | cut -d')' -f1`" -S smtp=smtp://mail.server.tld -S smtp-auth=login -S smtp-auth user=user@domain.tld -S smtp-auth-password=PassW0rd -S from="LLC COMPANY" to@domain.tld

else
echo "Okay - Load Average $loadavg ($thisloadavg) "
fi

このスクリプトを/etc/cron.dailyフォルダにload-average-2.shというファイル名で保存し、実行権限を設定します。

次に、以下のコマンドを使用して、スクリプトを2分ごとに実行するようにcrontabに追加します:

*/2 * * * * /etc/cron.daily/load-average-2.sh >> /dev/null 2>&1

必要に応じて次の値を変更します:

  • my.server.tld - スクリプトをインストールするサーバー名
  • mail.server.tld - スクリプトが通知を送信するメールサーバーのドメイン名
  • user@domain.tld - メールサーバーに接続するためのメールアカウント(ログイン)
  • PassW0rd - メールアカウントのパスワード
  • LLC COMPANY - メールの送信元名とアドレス
  • to@domain.tld - 通知を送信する宛先メールアドレス

負荷平均(load average)が2(つまり200%(2コア))を超えると、スクリプトが通知を送信します。この値はサーバーのコア数に応じて変更できます。例えば、4コアの場合、最大負荷は4、つまり400%となります。

必要に応じて、負荷を軽減するために実行するコマンドをスクリプトに追加できます。それらはelseの前に追加します。例えば:

service nginx restart
service ddos restart
service httpd restart




No Comments Yet