我在digitalocean的Ubuntu 18上的服务器部署在了烧瓶+ nginx + uwsgi上。 4核8 Gb RAM。图像通过表单加载并由神经网络脚本 detect.py 处理。该操作在执行过程中需要大量RAM(大约2 Gb)。在脚本的每次迭代之后,都会减少内存。到目前为止,执行5-6后,由于内存不足,服务器因错误而关闭。日志RAM消耗量(重新启动后的第一个条目,以及每次迭代后的条目):
Uwsgi进程状态和进程内存消耗:
从一开始,我就以为我对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中有一个设置可以帮助释放内存而无需重新启动服务器?