过去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
我仍然无法诊断出确切的问题并进行复制。寻找任何具体的方向进行探索。随时分享您的假设/想法。让我知道是否需要我提供其他任何信息以使其更加直观。
答案 0 :(得分:0)
我也曾经在使用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并没有任何明显的效果。如果有人能启发我,那就太好了。
谢谢