Ребятки, нужен совет. Сервер на Ubuntu 18 Digitalocean развернут на flask + nginx + uwsgi. 4 ядра 8 G RAM. Пока единственная операция - выполнение скрипта по обработке переданного через форму изображения. Операция требует большого кол-ва RAM в процессе выполнения. После каждой итерации скрипта катастрофически уменьшается память. Пока после 5-6 выполнений сервак ложится с ошибкой по нехватке памяти. Лог расхода RAM такой (первая запись после рестарта uwsgi и дальше после каждой итерации):
Статус процессов uwsgi и расход памяти процессами
Я не совсем понимаю, чем она занята. Скрипт картинку обработал и выдал результат - число, все на этом. Вопрос такой, есть ли способ после выполнения скрипта освобождать за собой RAM?
upd
Загрузка изображений стандартная фласковская, в ней же вызывается скрипт по обработке
detect()@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")
detect() здесь можно посмотреть
https://github.com/ultralytics/yolov3/blob/master/...pps
Поправка, для чистоты эксперимента запустил скрипт обработки изображения напрямую из командной строки. В момент обработки забирает около 2G RAM. После выполнения операции роста потребления памяти нет вообще, все возвращается к первоначальному значению. Получается, что проблема проявляется после вызова скрипта через фласковскую функцию.