如何避免Flask Web应用程序出现内存泄漏?

时间:2019-03-01 07:17:11

标签: python flask neural-network uwsgi ram

我在digitalocean的Ubuntu 18上的服务器部署在了烧瓶+ nginx + uwsgi上。 4核8 Gb RAM。图像通过表单加载并由神经网络脚本 detect.py 处理。该操作在执行过程中需要大量RAM(大约2 Gb)。在脚本的每次迭代之后,都会减少内存。到目前为止,执行5-6后,由于内存不足,服务器因错误而关闭。日志RAM消耗量(重新启动后的第一个条目,以及每次迭代后的条目):

enter image description here

Uwsgi进程状态和进程内存消耗:

enter image description here

从一开始,我就以为我对uwsgi服务器的配置不正确。我试图添加/更改各种参数,但没有帮助。然后,我检查了内置烧瓶服务器上本地计算机上的工作。而且内存问题也是一样!

最有趣的是,如果直接从命令行执行图像处理脚本,就没有问题。仅当您通过服务器调用 detect.py 函数时,才会出现内存泄漏。

烧瓶端点:

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        # check if the post request has the file part
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        # if user does not select file, browser also
        # submit a empty part without filename
        if file.filename == '':
            flash('NO selected file')
            return redirect(request.url)
        if not allowed_file(file.filename):
            flash("Only JPG file is used")
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            img = (os.path.join(app.config['UPLOAD_FOLDER'], filename))
            count = detect(images=img)
            return redirect(url_for("result", count=count))
            #return str(count)
    return render_template("index.html")

现在我很困惑,下一步该怎么做? 第二,也许在uwsgi中有一个设置可以帮助释放内存而无需重新启动服务器?

0 个答案:

没有答案