私は、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 ログで短い間隔内の複数のリクエストを確認してください。