Как избежать утечки памяти в флеш-веб-приложении? - PullRequest
0 голосов
/ 01 марта 2019

У меня сервер на Ubuntu 18 в digitalocean развернут на флешке + nginx + uwsgi.4 ядра 8 Гб оперативной памяти.Изображение загружается через форму и обрабатывается скриптом нейронной сети detect.py .Для выполнения операции требуется большой объем оперативной памяти (около 2 Гб).После каждой итерации скрипта память уменьшается.До сих пор после выполнения 5-6 сервер отключается с ошибкой из-за нехватки памяти.Журнал потребления ОЗУ такой (первая запись после перезапуска и далее после каждой итерации):

enter image description here

Состояние процесса Uwsgi и потребление памяти процессом:

enter image description here

С самого начала я думал, что неправильно настроил сервер uwsgi.Я пытался добавить / изменить различные параметры, но это не помогло.Затем я проверил работу на локальном компьютере на встроенном флеш-сервере.И проблема с памятью та же!

Самое интересное, что если выполнить сценарий обработки изображения непосредственно из командной строки, проблем нет.Утечка памяти появляется только при вызове функции detect.py через сервер.

Конечная точка Flask:

@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 есть настройка, которая поможет освободить память без перезагрузки сервера?

...