phpsessioncleanのせいでサーバーが重かった話
に投稿
技術
アフィリエイトリンクを含みます
アクセス数増えてないのになぜかサーバーが重いというか時々nginxが応答しないでエラー返すときがあり、調べてみたところ、結論は、PHPのセッションファイルを定期実行で削除するphpsessioncleanが原因でした。
やったこと
- htopでロードアベレージが上がってきたことを確認。htop上では特に重いプロセスはない。nginxなどのサービスのプロセスしか出ないから。となるとサービスじゃない何かが原因だろうと考えて、
- topコマンドを打つ。一番上の右端にfindと書いてある。findコマンドが重いんか?ということで、
- ps aux | grep find を実行してみたら、find -O3 /var/lib/php/sessions/ -ignore_readdir_race -depth -mindepth 1 -name sess_* -type f -cmin +24 -delete このコマンドが原因のようだとわかる。wコマンドやps -C find -o comm,pid,ppid,%cpu,psrもした。
- このコマンドから-を除去してGoogle検索してみると、phpsessioncleanが見つかる。
- phpsessioncleanの中身を見たら、当該findコマンドが見つかる
- systemctl | grep php するとphpsessionclean.timerが見つかる。session files every 30 minsと書いてある。重くなる頻度がちょうど30分ごとくらいだから、これだなと。
- systemctl status phpsessionclean.timer コマンド → activeのようなので、systemctl stop phpsessionclean.timer で停止。systemctl disable phpsessionclean.timer で無効化。
- phpsessioncleanでやっていたこと(PHPのセッションファイルの古いファイルを定期削除)を行うプログラムを自作して定期実行
これで完了です。その後、サーバーが重くなる現象は解消しました。
なんで今まで普通に動いていたfindコマンドが重くなったのかは謎ですが、ひとまずこれで様子を見ようかなと思います。