一段时间后,由gunicorn运行的烧瓶应用程序被挂起

时间:2019-06-06 09:30:40

标签: python python-3.x https server gunicorn

过去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

我仍然无法诊断出确切的问题并进行复制。寻找任何具体的方向进行探索。随时分享您的假设/想法。让我知道是否需要我提供其他任何信息以使其更加直观。

1 个答案:

答案 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并没有任何明显的效果。如果有人能启发我,那就太好了。

谢谢