nginx/passengerで実行されているプロダクションルビーシナトラアプリを持っていて、リクエストがわかりにくくなるのをよく見ます。私は10秒ごとにマシンのクラスタ上で乗客状態を呼び出すためのスクリプトを書いて、その結果をグラフにプロットしました。乗客のすべての実行中のルビースレッドでスタックトレースを取得する方法
青い線はこれが4機全体の平均である60に常にスパイク待っグローバルキューを示し、青い線が60に当たったときに、それはすべてのマシンが限界に達していることを意味:これは私が見たものですでる。私は現在のpassenger_max_pool_sizeを20に設定しているので、最大プールサイズの3倍に達しており、おそらく後続のリクエストをドロップしています。
私のアプリは、Amazon RDS mysqlバックエンドとRedisインスタンスの2つの主要な外部リソースに依存しています。おそらく、これらのうちの1つが定期的に遅くなったり反応しなくなったりするため、この動作が起こります。
ここでボトルネックがAmazon RDS、Redis、または何か他のものであるかどうかをスタックトレースで取得する方法についてアドバイスをいただけますか?
ありがとうございます!
は私が待っていたどのくらい知っていることはできますか? AFAIKでは、自動保存はバックグラウンドで実行する必要があります。メモリページをコピーしている最中に300msの時間がかかるだけです。 – seppo0010
経験的には、私のredisノードが数秒間ブロックするように見えますが、60秒間に5〜10秒程度のブロックが見られます。私はスレーブをスピンアップし、スレーブを使用して保存しようとします。 – esilver