2016-03-22 141 views
9

私のアプリケーションでは、サーバ側でuWSGIを使用してnginxを使用しています。私は(応答時間> 4S)大きな要求を行うと、次のように表示されますuWSGIはOSErrorを発生させます:大量のリクエスト中に書き込みエラーが発生しました

SIGPIPE: writing to a closed pipe/socket/fd (probably the client 
    disconnected) on request _URL_ (ip XX.XX.XX.XX) !!! 

uwsgi_response_writev_headers_and_body_do(): Broken pipe 
    [core/writer.c line 287] during GET _URL_ (XX.XX.XX.XX) 

OSError: write error 

uWSGIをストリームに書き込みをしようとしているようですが、このストリームがすでに閉じられています。私はnginxのログ(error.logに)チェックすると :もちろん

upstream prematurely closed connection while reading response 
    header from upstream ... 

を、私のクライアント(RESTクライアントまたはブラウザ)が502エラーを受け取ります。

〜4秒後にこのエラーが発生します。

ただし、この問題を防ぐ方法はわかりません。

location my_api_url { 
    [...] 
    uwsgi_buffer_size 32k; 
    uwsgi_buffers 8 32k; 
    uwsgi_busy_buffers_size 32k; 

    uwsgi_read_timeout 300; 
    uwsgi_send_timeout 300; 

    uwsgi_connect_timeout 60; 
} 

しかし、問題はまだここにある: 私は私のnginxの設定ファイルにいくつかのパラメータを設定しようとしました。 は、私はまた、uWSGIの設定ファイル(wsgi.ini)で、これらのパラメータを設定しようとしました:応答時間を最適化しようとする

buffer-size=8192 
ignore-sigpipe=true 
ignore-write-errors=true 

前に、私はこの問題は解決策を持っている願っています。私は別の投稿で働いているものは見つけられません。私は大量のデータを扱っているので、私の応答時間は、場合によっては4〜10秒の間になります。

は、あなたが私を助けることを願って:)

事前のおかげで多くのことを。

+0

NGINXはプロキシの背後にありますか?通常、クライアントが接続を先に閉じたときに書き込みエラーが発生します。 –

答えて

5

アップロードする際に、チャンクエンコードを使用する場合があります。 uWSGIオプション --chunked-input-timeout, デフォルトでは4秒です(defaults--socket-timeoutの値は4秒です)。

理論的には別の場所に問題があるかもしれませんが、前述のオプション を試してみることをおすすめします。プラス、迷惑な例外は、私は(私は3つのオプションではなく、2を提供することに注意してください)私のuWSGIの設定で

ignore-sigpipe=true 
ignore-write-errors=true 
disable-write-exception=true 

を持っている理由です:ignore-sigpipeは uWSGIはSIGPIPEエラーが表示されない可能。 ignore-write-errorsは、 でエラーを表示しません。 uwsgi_response_writev_headers_and_body_do; disable-write-exceptionは、書き込み時に OSErrorの生成を防ぎます。

+0

ありがとう!本当に助力の答え! – JulCh

関連する問題