簡體   English   中英

Gunicorn 在 docker 容器中運行的 python django 服務陷入死鎖

[英]Gunicorn is stuck in deadlock for python django service running in docker container

我正在運行一個通過 gunicorn 服務器運行的 python django webhook 應用程序。 我的設置是 nginx + Gunicorn + Django。這是配置的樣子: gunicorn app1.wsgi:application --bind 0.0.0.0:8000 --timeout=0

該應用程序完美運行約 1 -2 百萬個請求,但運行幾個小時后 gunicorn 顯示睡眠 state 然后不再收到 webhook 事件root 3219 1.3 0.0 256620 61532? Sl 14:04 0:19 /usr/local/bin/python /usr/local/bin/gunicorn app1.wsgi:application --bind 0.0.0.0:8000 --timeout=0 root 3219 1.3 0.0 256620 61532? Sl 14:04 0:19 /usr/local/bin/python /usr/local/bin/gunicorn app1.wsgi:application --bind 0.0.0.0:8000 --timeout=0

該服務在 4 個不同的容器中運行,在幾個小時內觀察到 1 個容器的這種行為,然后在隨后的幾個小時內對一個或多個容器發生這種行為。

我嘗試發送一個信號來重新加載 gunicorn 配置,它能夠使 gunicorn 進程運行 state。

奇怪的是,當我運行 4 個 django 容器時,對於很少的請求,它運行得非常好。 但是連續接收流量會導致 gunicorn worker 中的一個 state 陷入僵局,它會繼續等待觸發以再次開始接受流量,而三個 gunicorn worker 中的 rest 健康且正在運行!

問題 - 為什么 gunicorn worker 進程進入睡眠狀態(Sl)? 如何解決此行為?

嘗試將 Nginx 作為反向代理放在 gunicorn 前面。 也許 gunicorn 不正確地處理了導致死鎖的無效客戶端。 Nginx 本身提供緩沖,可以避免 gunicorn 受到諸如永久打開的 TCP 連接之類的不良事件的影響。

請參閱有關正確部署的 gunicorn 文檔 - https://docs.gunicorn.org/en/stable/deploy.html

請參閱此問題以進行問題討論 - https://github.com/benoitc/gunicorn/issues/2917

暫無
暫無

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

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