今回の問題
Nginx + php-fpm で構成しているサービスで 499 エラーが結構な頻度で発生
どんな作りか
- SPA で1画面でAPIを平均で5本くらい実行している
- EC2 は複数台構成
まずやったこと
Nginx のログをひたすら解析
発生している画面を特定したり、重いAPIを特定したり、499 を出しているのが画面単位なのか、API単位なのか、とかとか
見えてきたこと
- リクエストが重い(レスポンスに1秒以上かかっているAPIが多発している)時間帯に発生していることが多い(画面で呼ばれる API のうち複数本 499 になっている)
- しかし平時でも発生はしている(画面で呼ばれる API のうち単発で 499 になってる)
- 特定のサーバで 499 が多め(全体的に重め)
- バランシングは問題ない様子
再現してみた
- 画面を開く
- バックでAPIを呼び出している間、ローディング中の画面が表示されるので、ブラウザのリロードボタンを押す
- ローディング中画面でブラウザのリロードの「×」ボタンを押す
→ Nginx のログに 499 が吐かれた
わかってしまえば至極当たり前なことで、API のレスポンスが遅くてローディング中の画面がずっと表示されてて、リロードして、それでも返ってこないので×を押して止めてみる、というのは誰しもやるということだった。
特定のサーバで 499 が多め
これに関してはインスタンスガチャで引いちゃった疑惑があるので今回はちょっと置いておく。
じゃぁ「次にどうするの?」ということになるが、EC2のスペックあげるとか php-fpm の設定見直すとかそういうことになるのかな、と。
ここから先はインフラ屋さんに任せたい。