Amazon Linux 2023 にしてから深夜のログローテーション時に回復していた PHP-FPM のメモリ使用量が回復しなくなってしまい徐々に蓄積されていくようになってしまった。
Amazon Linux 2023 になってから cron ではなく systemd でログのローテーションが行われるようになったのとなにか関係があるのかと思ったけどログローテーション時のコマンドは同じ。もしかしたら PHP 7 系と 8 系の違いもあるのかもしれない(環境によってはオーバーフローする気配はなさそうなのだけど)。
このままだとオーバーフローしてしまうので systemd のタイマーを使って深夜に PHP-FPM のリロードを行わせることにした。
マニュアルはこの辺。
/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