34

私のアプリケーションは uwsgi+django セットアップです。gevent を使用してパフォーマンス テストを行い、1200 のリクエストを同時に実行しています。この時点で、uwsgi は次のログ メッセージで IO エラーをスローします。

uwsgi_response_write_body_do(): Broken pipe [core/writer.c line 260]
IOError: write error

Django 1.4.0
uwsgi: 1.9.13
python: 2.6
TCP リッスン キュー: 1000

この壊れたパイプエラーの原因は何ですか?

4

3 に答える 3

46

これは、NGINX が uWSGI へのリクエストを開始したが、uWSGI が応答するのに時間がかかりすぎて、NGINX が uWSGI への接続を閉じた場合に発生する可能性があります。uWSGI が最終的に終了すると、応答を NGINX に戻そうとしますが、NGINX は以前に接続を閉じたため、uWSGI は I/O エラーをスローします。

つまり、uWSGI プロセスに時間がかかりすぎている可能性があります。

アップデート:

uWSGI の Harakiri モードは、必要に応じてこのような時間のかかるプロセスを自動的に終了するのに役立ち ます 。これを行うのは、プロセスが長いクエリまたは必要なものを終了している可能性があるためです。

于 2013-12-11T17:46:06.547 に答える
5

このエラーは、uWSGI/Django が応答を送信する前に、クライアントが接続を閉じたことを意味します。これは通常、ブラウザまたは Web サーバー フロントエンドのタイムアウトが原因です。

これを修正するには、セットアップが正しいことを確認する必要があります。アプリケーションのすべてのパーツ (データベース アダプターを含む) が gevent に対応していることを確認してください。そうでない場合、gevent を使用しても何の利点も得られず、パフォーマンスが低下する可能性さえあります。

これに加えて、データベース サーバーが 1200 の同時接続を管理できることを確認する必要があります。そうでない場合は、接続試行を無視している可能性があります。

于 2013-07-07T05:39:05.993 に答える