mattintosh note

どこかのエンジニアモドキの備忘録

フィギュア関連の写真はすべて削除されました。過去の写真については Internet Archive を参照してください。
ホビー関連の情報は hobby.mattintosh-note.jp に移行しています

Amazon Linux 2023でPHP-FPMのメモリ使用量が徐々に増えるのでsystemdタイマーで対応する

Amazon Linux 2023 にしてから深夜のログローテーション時に回復していた PHP-FPM のメモリ使用量が回復しなくなってしまい徐々に蓄積されていくようになってしまった。

Amazon Linux 2023 になってから cron ではなく systemd でログのローテーションが行われるようになったのとなにか関係があるのかと思ったけどログローテーション時のコマンドは同じ。もしかしたら PHP 7 系と 8 系の違いもあるのかもしれない(環境によってはオーバーフローする気配はなさそうなのだけど)。

このままだとオーバーフローしてしまうので systemd のタイマーを使って深夜に PHP-FPM のリロードを行わせることにした。

マニュアルはこの辺。

www.freedesktop.org

/etc/systemd/system/reload-php.service

[Unit]
Description=Reload php-fpm

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl reload php-fpm

/etc/systemd/system/reload-php.timer

ペース的には週 1 回で済みそうなので月曜 3:00 だけ実行するように設定。複数台構成で全機が同じタイミングでリロードしてしまうのを避けるため RandomizedDelaySec で 3:00〜4:00 の間にランダムでタイマーが作動するようにしておく。詳細は man 5 systemd.timer、時間の指定については man 7 systemd.time 参照。

[Unit]
Description=Reload php-fpm

[Timer]
OnCalendar=Mon 03:00
RandomizedDelaySec=1h

[Install]
WantedBy=timers.target

ユニットファイルの検証。

systemd-analyze verify /etc/systemd/system/reload-php.*

タイマーを有効化。

systemctl daemon-reload
systemctl start  reload-php.timer
systemctl enable reload-php.timer

タイマーの状態を確認する。

systemctl list-timers