Nginx/Gunicorn の応答に時間がかかりすぎる

Nginx/Gunicorn の応答に時間がかかりすぎる

私は、Nginx 経由で静的ファイルを提供する Django アプリをセットアップし、アップストリームを Gunicorn 経由で実行して、専用サーバーにある PSQL データベースで Django アプリを実行しています。
問題は、データベースへのトリップを必要としないホームページでも、サイトの応答に時間がかかりすぎることです。
注目すべき重要な点の 1 つは、スーパーバイザー サービス (2 つのプロセス (1 つは gunicorn、もう 1 つは celery) を担当) を再起動すると、最大 3 つの要求に対して高速応答が得られることです。
その 3 つの要求の後、アプリケーションは再び応答しなくなります。

設定に関しては、Nginx はタイムアウト (接続、読み取り、送信の 3 つすべて) が 300 に設定されています
。Gunicorn も同じタイムアウトが設定されており、3 つのワーカーが実行されるように設定されています。

アプリケーションは、単一のCPUと1GBのメモリを搭載したVPS上で実行されています。
以下は、iostat基本的な統計情報。

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.49    0.00    0.44    0.03    3.21   94.83

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
xvda              0.74         3.23        12.79    1023355    4054257'

この動作の原因は何でしょうか?

答え1

Tero Kilkanen 氏のコメントで述べられているように、問題はコード自体にあったことが判明しました。

リアルタイム アプリケーションに似せるためにサーバーに大量のリクエストを詰め込んでいたため、サーバー全体が他のリクエストを処理できなくなってしまいました。
サーバーの統計情報を見ても、すべての指標でサーバーが作業可能であることが示されていたため、問題の解明には役立ちませんでした。

したがって、このような問題が発生した場合は、Nginx ログで短い間隔内の複数のリクエストを確認してください。

関連情報