18

私のテクノロジー スタックは、チャネル バックエンドとしての Redis、データベースとしての Postgresql、ASGI サーバーとしての Daphne、アプリケーション全体の前の Nginx です。すべてが Docker Swarm を使用してデプロイされ、Redis とデータベースのみが外部に配置されます。約 20 の仮想ホストがあり、20 のインターフェイス サーバー、40 の http ワーカー、および 20 の websocket ワーカーがあります。ロード バランシングは、Ingress オーバーレイ Docker ネットワークを使用して行われます。

問題は、パフォーマンスに関して非常に奇妙なことが時々起こることです。ほとんどのリクエストは 400 ミリ秒未満で処理されますが、負荷が非常に小さい場合でも、リクエストに最大 2 ~ 3 秒かかることがあります。Django デバッグ ツールバーまたはミドルウェア ベースのプロファイラーを使用してワーカーをプロファイリングすると、何も表示されません (タイミング 0.01 秒程度)。

私の質問: django-channels を使用してリクエスト パス全体をプロファイリングする良い方法はありますか? Daphne によってリクエストが処理されたとき、ワーカーが処理を開始したとき、処理が終了したとき、インターフェイス サーバーがクライアントに応答を送信したときなど、各フェーズにかかる時間を教えてください。現在、これを解決する方法がわかりません。

4

2 に答える 2