我正在運行一個簡單的Web應用程序,它爲每個請求使用一些Web服務,並且我發現我們的服務器使某些時間超時的請求(合成599錯誤),即使其他服務在任何時候都有響應(我已經證實了這一點)。Tornado AsyncHTTPClient在中等負載下請求超時
這些都是那種,我得到錯誤信息:
HTTP 599: Connection timed out after 7005 milliseconds
(超時而連接)
HTTP 599: Operation timed out after 5049 milliseconds with 0 out of -1 bytes received
HTTP 599: Operation timed out after 10005 milliseconds with 11197 out of 13047 bytes received
((接收數據前超時)超時部分傳輸數據)
我已經能夠在兩個不同的環境中,在Amazon EC2迷你實例和我的Macbook Pro(i7)中重現這一點。在EC2實例中,超時開始發生時只有2個併發客戶端發出請求,Macbook持續到8個併發客戶端,然後它也開始顯示超時。
我已經嘗試了一些東西,如更新Tornado版本(2.2,2.3.1,2.4.1和3.1.1,如果我沒記錯的話),將基礎AsyncHTTPClient實現從默認簡單的更改爲基於pycurl並增加異步客戶端的數量(至200),但錯誤仍在發生。
我不知道我有什麼可可能做錯了,因爲這看起來並不像所承諾的可擴展性龍捲風應該提供在所有...
任何提示?
更新
只是備案,我們在異步回調使用memcache
,但庫不是異步本身。我將其替換爲:https://github.com/dpnova/tornado-memcache/
這是我認爲的最大問題,雖然我們仍然不時得到599。
不睡覺,但我會嘗試'IOLoop.set_blocking_log_threshold' ...謝謝! :) – fortran
不幸的是,堆棧跟蹤看起來很隨機,就像沒有一個地方阻塞計算正在執行:(有時它是在一段代碼中操縱一些json響應使其更友好,其他時間在模板中render ... – fortran
你使用的是什麼閾值?如果你看到所有的堆棧跟蹤信息都表明你正在做*某事*在非阻塞服務器中使用太慢了。 –