簡體   English   中英

如何跟蹤Python / Django / uwsgi / nginx超時

[英]How to track down a Python/Django/uwsgi/nginx timeout

我有以下設置...

  • Nginx偵聽公共端口80並代理對localhost:10000請求
  • 運行django站點1的uwsgi在localhost:10000上偵聽並生成一些網頁。 它還會在localhost:10001上對Web服務進行一些調用
  • 運行django站點2的uwsgi在localhost:10001上偵聽,其中包括對其他otherhost:1234上的Web服務進行一些調用

otherhost繁忙時,某些請求最多可能需要10分鍾才能完成。 不幸的是,恰好2分鍾后,nginx給出了502 Bad Gateway

據我所知,問題一定是...

nginx超時:

我認為這不太可能,因為那將是504,但我正在使用:

proxy_read_timeout 1800;
proxy_connect_timeout 1800;

uwsgi#1超時:

我正在這樣啟動uwsgi(在兩種情況下)

nohup uwsgi --http :8000 --chdir /opt/Path/To/Project --module Project.wsgi
            --virtualenv /opt/pyenv --enable-threads --logto /var/log/LogFile.log -p 1
            --threads 50 -t 1800 2> /dev/null &

Django站點1調用站點2:

呼叫是這樣進行的:

    response = urllib.request.urlopen(Url, urlencode(Data).encode("utf-8"), 
               timeout=1800).read().decode("utf-8")

站點2呼叫其他站點:

這是由使用HTTPConnectionPool的庫完成的。 我已將超時時間設置為10分鍾。 我認為這不太可能,因為將其設置為(例如)2s會導致Http 500超時...

我已經掃描我的代碼庫timeout (和120120000 ,甚至,在絕望中2 ),但我找不到任何地方的超時被設置-我想這是從一些默認。

如果我跳過nginx並執行以下操作:

curl -m1800 -XGET 'http://localhost:10000/UI/Url'

我懂了

curl:(52)來自服務器的空回復

一分鍾后。

有什么明顯的我想念的東西嗎? 有什么好的方法可以追蹤到這個?

您有一個漂亮的“奇怪”設置:

nginx-> uwsgi http路由器-> uwsgi

代替

nginx-> uwsgi

也許您有充分的理由,但是在這種情況下,您需要通過--http-timeout 1800設置uwsgi http路由器和uwsgi之間的超時

如果您不需要/不需要http路由器,則可以使用--http-socket選項讓uwsgi講http。

嘗試增加uwsgi_read_timeout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM