概要
AWSで使っているWebサーバのメモリ使用量が漸増していくため、以下の処置を施しました。
実行環境
- Ubuntu 20.04を稼働しているWebサーバ
- メモリは4GB
さっくりとした手順
- メモリ使用量をトリガーとして、閾値を超えたらWebサービスの再起動を行うスクリプトを作成。
- このスクリプトをCron化。
スクリプト作成
管理者権限で以下を作成します。
- memory_monitor.sh
#!/bin/bash
# メモリ使用量の閾値を設定する(ここではメガバイト単位で指定)
threshold=3584
# ログの保存パスと名前を設定する
log_path="/var/log/"
log_name="restart.log"
# 現在のメモリ使用量を取得する
mem_used_before=$(free -m | awk 'NR==2{print $3}')
# メモリ使用量が閾値を超えた場合にWebサービスの再起動を行う
if [ "$mem_used_before" -gt "$threshold" ]; then
systemctl restart httpd
# 極端な話、reboot と指定することでシステムそのものの再起動も可能です
mem_used_after=$(free -m | awk 'NR==2{print $3}')
mem_used_diff=$((mem_used_after - mem_used_before))
echo "httpd service restarted on $(date). Memory usage difference: $mem_used_diff MB" >> "${log_path}${log_name}"
fi
作成後、実行権限を付与します。
sudo chmod 744 memory_monitor.sh
cron登録
sudo crontab -e -u root
- 登録内容
*/15 * * * * /path/to/directory/memory_monitor.sh
# 格納したパスを指定します
# 15分おきに実行としています。
今後の課題
これはあくまでも対処療法。根本的なボトルネックの究明は継続して行います。