web-dev-qa-db-ja.com

リクエストのキューイング時間が非常に長いのはなぜですか?

Railsアプリケーションサーバーを実行しています。セットアップは次のとおりです。

  • Apache 2、httpsおよびsslクライアント証明書の両方にmod_sslを使用
  • Phusion Passenger 5
  • レール4
  • Ruby 2.1

NewRelicを使用して実行中のアプリケーションを監視しています。私は最近、主に好奇心から、リクエストキューイングの遅延の監視を有効にしました。リクエストキューの遅延が実際のRubyコードとデータベースの実行時間と同じかそれより長いことが多いことに驚きました。200ミリ秒までは長いようですよね?

Significant request queue delay

ほとんどのオンライン情報は、リクエストキューがワーカーが利用可能になるのを待っているときにこれが発生することを示していますが、そうではありません。以下に示すように、プロビジョニングされたインスタンスはほとんど使用していません。ピーク時には、使用率が30%を超えることはめったにありません。

Utilization of worker instances

他のいくつかの注意事項:

  • ApacheとPassengerは同じサーバー上にあるため、システムクロックが同期していないために誤ったタイミングの問題が発生することはありません。
  • SSL処理に関して、ApacheはクライアントSSL証明書を取得し、それをリクエストのヘッダーとして添付します。 Railsアプリケーションは、残りの処理を処理します。

ここで問題は何でしょうか?

2
YWCA Hello

200msはそれほどひどいようには見えません。 'request queuing'メトリックは、Webサーバーがリクエストをログに記録してからNew Relicエージェントがロードされるまでの時間の尺度です(_before_filters_の後)。これを測定する方法は、問題が存在しない場合、問題があるように見える可能性があります。レイテンシーは素晴らしく、均一であり、ワーカーが不足している、またはリソース/ CPUが不足していることを示すスパイクはありません。 _watch passenger-status_を使用してこれを確認できます。 Linuxユーティリティを使用して、サーバーのリソース使用量をローカルで再確認することもできます。

top, iotop, vmstat, sar (systat)

それでも最適化を探したいですか? NewRelicエージェントの前に実行されるものをすべてチェックしてください。考えられる問題点:

少し掘り下げる必要があります。幸運を!

3
Antonius Bloch