PHPアプリ高負荷の原因は?
本番運用しているシステムでずっと「PHP Laravelで作成したアプリの負荷が高い」という問題に悩まされていた。
ここ最近意外、かつ簡単な方法で解決できたのでメモしておく。
プログラム改修やサーバ増強でアプローチしていたが
PHPアプリの負荷を下げつ方法として、プログラム改修を主に行っていた。
作られたプログラムで効率的にキャッシュを利用していなかったり、場合によっては数千レコード単位で結果を返し、それを配列でぐるぐるしているようなプログラムがあったからだ。
このあたりのプログラムを見直して、若干負荷を下げることはできた。
nginx, php-fpmの設定も見直す
nginxやphp-fpmの設定に関しても、以下の情報をもとチューニングを行った。
が、ミドルウェアのチューニングでは、それほど大きな効果が出なかった気がする。
チューニング方法が悪かったのか、もしくはこれらのミドルウェアのデフォルト値が割と優秀なのかも。
参考:
https://qiita.com/qiita_masaharu/items/29ec160c4e830c138132
一応、上記の対応で以前よりも負荷を抑えることが出来、安心していました。
再び発生した高負荷問題
新規で作成したLaravelアプリで再び高負荷問題が発生。
こちらもキャッシュ利用の見直しや、コードの最適化である程度負荷を下げることができた。
だが、それでも負荷が完全に下がり切らず、アクセス集中の時間帯はひやひやするレベルで負荷がかかっていた。
同僚の気づきと原因判明
ある日、フロントエンドに強い同僚が一言「対応します!」と言って何かを行ったところ、
負荷がぱったりと収まりました
いったい何を行ったのか聞いたところ
xdebugのモジュールを削除しました
とのこと。
どうやら本番環境にもx-debugが入っており、これがかなりの負荷をかけていた模様。
x-debug削除後は今までの負荷が嘘のようで、アクセス集中の時間帯でも安定して稼働するようになりました。
ちなみに、なんでx-debugが高負荷の原因になっているのか突き止めることができたのか理由を聞いたところ
負荷対策を行ったプログラムをリリースしたのに、全く負荷が下がらないため、プログラム以外の部分に問題があることが分かった。
とのこと。
うーん、素晴らしい・・・
XDebug負荷の似たような事例として、以下のようなケースもある様です。
https://www.marineroad.com/staff-blog/14210.html
yumに頼りすぎた弊害か・・・
環境構築時、yumで「とりあえずphp関連のもの入れてしまえ!」の勢いで構築したので、それ以降全く環境の見直しがかかっていなかった模様。
yumでの環境構築は便利だけど、何がインストールされるのか、ちゃんと把握していないとダメですね。
それ以前に、インフラ周りに強い人間が全くいないのも問題ですが・・・
アプリばっかりじゃなく、インフラ周りも勉強しないといけないですな。
カバー画像
Mylene2401によるPixabayからの画像