繁体   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