2012-11-13 24 views
0

棧:nginx,uwsgi,django爲什麼uwsgi工人閒置,但nginx顯示了很多超時?

uwsgitop和top都顯示uwsgi worker是空閒的,而nginx錯誤日誌則表示上行超時。

我以爲有些請求需要大量的資源,比如等待數據庫或緩存,而其他的則不需要。在檢查超時請求後,他們中的大多數人並不貪婪。任何類型的請求都已超時。

那麼爲什麼如果其他人真的很忙,nginx不會將請求放到閒置的請求中?爲什麼uwsgi大師只是讓人忙,其他人閒着?

+0

在我的經驗nginx的WSGI實現表現不佳,特別是如果應用程序往往會阻止幾毫秒。 –

+0

他們是一直在做這個還是隻在負載很高時才這樣做?你的網站有很多IO嗎? – RickyA

+0

@PauloScardine uwsgi實際上在同步或異步方式下工作得非常好,儘管我不敢使用異步模式。我用芹菜代替。我認爲uwsig也是阻塞的,但其他工作人員閒置,所以它不能阻止問題。 – samuel

回答

6

我想回答我自己的問題。

改變內核參數:net.ipv4.ip_conntrack_max從65560到6556000

我對我們如何找到了答案一個完整的故事:

  1. 用戶說慢,慢,慢

  2. nginx的與淹沒「上游連接超時」

  3. 我檢查uwsgi日誌,發現了一些錯誤,固定它;發現更多,修復更多,而這個循環持續了好幾天。直到昨天,我認爲與uwsgi,memcached,db,redis或任何後端沒有任何關係,因爲uwsgi空閒,所以我認爲nginx肯定有問題,重新加載,重新啓動,檢查連接,worker,proxy_read_timeout等沒有運氣。

  4. 選中了ulimit -n,其中報告了1024個默認值。我有8個nginx工作者,所以連接應該達到1024 * 8,我認爲這可能是好的,因爲nginx從來沒有說太多打開的文件。無論如何,我將它改爲4096.沒有運氣。

  5. 檢查連接數量和狀態,則出現問題。上游連接全部處於syn_sent狀態,然後超時發生。 300個連接中只有2個或3個處於建立狀態。我們想知道爲什麼。我的一個朋友告訴我使用tcpdump,這是我從來不敢嘗試一次的魔法工具。

  6. 然後我們去到系統日誌,發現下面的錯誤,最後我們解決了這個問題

相關問題