[英]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
检查系统内存。 但似乎还好。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.