2024.11.14
いまさらNode.jsを知ろう~環境構築も~
2016.09.27
プログラミングRails+Unicornサーバーでプロセスが詰まったときのその場しのぎ
坂東です。
本番サービスはRails+Unicorn+Nginxで構築することが多いです。
CPUもメモリもぜんぜん食わないのにザクザク捌けてうれしいです。
昨晩、障害発生と対応を行ったので忘れないうちに共有します。
障害の内容
サービスのレスポンスが著しく悪くなるときがある。
サーバーやネットワークの負荷は特に上がっていない。
障害の原因
外部APIのレスポンスが不安定で、レスポンスを得るのに10秒かかることもあった。
そのプロセスがUnicornのtimeout値いっぱい動作し続けるため詰まっていた
※Unicornは前の処理が終わるまで次を処理できない
『Unicornのworker_processはCPU数+1』にすべしというのを何かで見かけて刷り込まれてた。
1Coreサーバーだったのでworker_process=2になってた。
APIを呼ぶ処理は全体の0.1%ぐらいだけど2回重なると即詰まる。
とりあえずの対応
APIをタイムアウトで切るのは少し問題のあるシステムなんです。
CPU負荷は楽勝だったのでworker_processをメモリが許す限り増やす。
1プロセスあたり200MB食ってたので、メモリ2GB足してworker_process=10に。
なんとかしのげてる。
本当の対応
外部APIを呼ぶような「CPU負荷は無いけど時間がかかる処理」があるシステムは、UnicornじゃなくPumaなどマルチスレッド物にした方が良いかなと思いました。
あとでやります。
おわり。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索