簡體   English   中英

由 gunicorn 運行的 Flask 應用程序在一段時間后被掛起

[英]Flask application being run by gunicorn gets hanged after some time

我面臨過去 30 天以來的一個獨特問題。 在嘗試了很多東西之后,我正在尋求社區的支持。

我使用 python Flask 制作了一個基於深度學習的 Web 應用程序。 后端使用 Python(深度學習代碼)編寫,前端使用 HTML、JS 和 Bootstrap 提供服務。 部署是使用 Gunicorn 完成的。 此外,該應用程序啟用了 https 並部署在 GCP 上。

應用程序可以正常運行一段時間,然后掛起。 盡管 python 進程仍在運行,但它停止為任何 API 請求提供服務和響應。 新命中不會到達 python 代碼。 這種行為在運行時間方面是非常隨機的。 有時需要 4-5 小時才能停止,有時甚至需要 2 天才能停止。 然后我使用 gunicorn 命令手動啟動應用程序,它可以工作。

我嘗試過的事情 -

  • 當應用程序處於掛起階段時,使用htop檢查系統內存。 但似乎還好。
  • 我嘗試使用 Jmeter 測試 API(按順序在循環中點擊多個請求)並且系統沒有掛斷。
  • 我什至使用uwsgi + apache運行該應用程序,但問題仍然存在。

這是用於運行 gunicorn 服務器的命令 -

gunicorn -b 0.0.0.0:443 --threads=4 --certfile=path_to_certificate_file --keyfile=path_to_key_file server:app --max-requests 1000 --access-logfile /var/log/gunicorn/gunicorn-access.log --error-logfile /var/log/gunicorn/gunicorn-error.log --capture-output --log-level debug --logger-class=simple --daemon

我仍然無法診斷確切的問題並復制它。 尋找任何特定的方向來探索。 隨意分享您的假設/想法。 讓我知道是否需要我方提供任何其他信息以使其更直觀。

我在使用 gunicorn/flask 應用程序時也遇到過這個問題:

請求僅在 gunicorn 啟動后的前幾分鍾內加載。 單獨放置幾分鍾后,gunicorn 停止響應請求(瀏覽器永久顯示“加載”圖標動畫)。 Gunicorn 錯誤日志什么也沒顯示。

我目前的解決方法是從客戶端 html 文件創建對燒瓶應用程序的任意“保持活動”調用。

所以在 Flask 應用程序文件中:

@app.route('/keep_alive/<val>')
def keep_alive(val):
    return json.dumps({'success':val}) 

在 html 的 JS 塊中:

function keepAlive() {
        var t = setTimeout(keepAlive, 60000);
        var d = new Date();
        var n = d.getTime();
        $.getJSON(base_url + '/keep_alive/' + n.toString(), function (data) {
                console.log('keep alive return ' + data)
            });
    } 
keepAlive();

值得一提的是,gunicorn 設置 --keep-alive=21600 沒有任何明顯的效果。 如果這里有人能啟發我,那就太好了。

謝謝

暫無
暫無

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

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