heroku Flask应用程序内存泄漏

lzfw57am  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(103)

我有一个 flask 应用程序有内存泄漏,我无法找出我哪里出错了。该应用程序用于通过应用程序实时演示Tensorflow模型。在调用模型加载并预测图像后,Heroku上的内存增加到108%,导致R14。此后,除非重新启动dynos,否则内存永远不会恢复到正常水平。
编辑:经过进一步的分析我发现“load_model(f)”行是导致泄漏的原因;虽然我不确定为什么从TF加载模型会导致这个问题。
下面是代码:

def read_image(filename):
    t1 = sitk.ReadImage(filename)
    t2 = sitk.GetArrayFromImage(t1)
    X = np.array(t2[(int(len(t2)/2))])
    X = scipy.ndimage.zoom(X, 224/288)
    X = np.stack((X,)*3, axis=-1)

    return X

@app.route("/predict", methods = ['GET','POST'])
def predict():
    f = "models/model"
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = file.filename
            file_path = os.path.join('static/images', filename)
            file.save(file_path)
            img = read_image(file_path)
            model = load_model(f)
            img = np.expand_dims(img, axis=0).astype(np.float32)
            predictions = model.predict(img)
            label_index = int(np.round(predictions[0][0]))
            result = ""
            if label_index == 0:
              result = "case0"
            elif label_index == 1:
              result = "case1"

            return render_template('test.html', result = result, filename = "test.png", css="show")

    return render_template('test.html')
anhgbhbe

anhgbhbe1#

我认为你的模型太大了,这是你的问题

20jt8wwn

20jt8wwn2#

当对象没有被正确释放或垃圾回收时,可能会发生内存泄漏。确保您正在正确地关闭文件、释放资源并在必要时使用上下文管理器。仔细检查您的代码,以确保您没有无意中保留对应该释放的对象的引用。

相关问题