1. 程式人生 > >我遇到的Nginx+uwsgi的500錯誤解決記錄

我遇到的Nginx+uwsgi的500錯誤解決記錄

我也不知道做了什麼,不過感覺也沒做什麼,就是改動了一下python程式,另外伺服器上手動刪除了mongodb的一個數據庫,然後就出現瞭如下的問題:

先是發現客戶端出現500錯誤,然後網頁開啟uWSGI Error  Python application not found錯誤,最後檢視伺服器記錄發現很多 readv() failed (104: Connection reset by peer) while reading upstream, 這種記錄。估計可能是因為我手動強刪資料庫造成伺服器突然崩潰,引發的錯誤。看來以後要小心操作了。最好先關閉各個服務再刪除東西,免得對其他程式造成影響。

不過加上--pep333-input提示“/usr/bin/uwsgi: unrecognized option '--pep333-input'” 就給去掉了,在伺服器上直接service server restart貌似沒啥效果,還是要重啟一下。

終於回來了,擦,嚇死我了

摘抄部分如下:

uwsgi報readv() faild

用uwsgi+nginx搭建的server,發現當用post請求時,會返回資料超時。查了一下uwsgi的error.log:

1
9825#0: *745262 readv() failed (104: Connection reset by peer) while reading upstream, client: 121.14.96.125

其解釋說解決方案有兩種:
在uwsgi執行引數上增加:

1
2
--pep333-input
--post-buffering 4096

試了一下,只有第二種有效,所以由於google了一下命令的具體含義:

post-buffering
開啟http body緩衝, 如果HTTP body的大小超過指定的限制,那麼就儲存到磁碟上.

OK,就是這樣~


2011-05-30

post-buffering
開啟http body緩衝, 如果HTTP body的大小超過指定的限制,那麼就儲存到磁碟上.

ini配置
[uwsgi]
post-buffering = 8192

命令列配置
–post-buffering 8192

post-buffering-bufsize
設定在post緩衝時的 內部緩衝區大小(分配用於讀取socket 流的chunk的大小)

post-buffering-bufsize 65536 將 分配64K的記憶體,作為 socket recv()函式的緩衝區. 對於128K的body, 需要兩個迴圈/兩次系統呼叫

async
開啟非同步模式

在10s鍾內沒有活動就關閉連線
–socket-timeout 10 (預設是4s)

buffer-size
為分析uwsgi包準備的內部緩衝區大小,預設是4K
–buffer-size 32768

-s 指定unix socket路徑或者tcp 的地址和埠號
-p worker程序數量
-d daemonize
l