gpt4 book ai didi

Python Google App Engine 无法释放对象数组的内存

转载 作者:太空狗 更新时间:2023-10-29 21:11:34 27 4
gpt4 key购买 nike

我使用 GAE(谷歌应用引擎),制作一个非常简单的网络应用程序。在处理请求的方法中,我只是创建了一大堆对象。之后,我删除了对该数组的所有引用。之后,我调用 gc.collect。

但是当我长时间测试(发送请求)时,Dashboard 的内存使用量不断增加。

我看起来像内存泄漏。但我认为代码还可以。

下面是一个示例代码。

from flask import Flask, request

import gc

app = Flask(__name__)

@app.route('/', methods=['POST'])
def hello():

gc.enable()

bigArr = []
for x in range(10000):
raw_data = request.get_data(cache=False)
bigArr.append(raw_data)
del raw_data

print('len(bigArr):' + str(len(bigArr)))
del bigArr
gc.collect()

return 'Hello World'


if __name__ == '__main__':
app.run(host='0.0.0.0', port=80, debug=True)

应用引擎配置:运行时间:python37自动缩放: 最大实例数:1

这是内存使用情况的图像: Please View the image of memory usage

最佳答案

该图看起来并不像您的内存使用“继续增加”。相反,它看起来很平坦。如果您有严重的内存泄漏,图表将会上升。

Python 进程需要从操作系统获取内存,然后使用该内存来存储您的 Python 对象。当 Python 对象被垃圾回收时,这些对象占用的内存将释放给 Python 进程,因为新对象可以存储在那里。但是对于操作系统来说,那 block 内存仍然属于 Python 进程,所以它在使用中。我想您的图表显示了该 Python 进程的内存使用情况。

从操作系统获得的内存被请求成比单个 Python 对象所需的大得多的 block 。而且它也必须以更大的 block 返回。当 Python 对象被分配并随后被垃圾回收时,剩余的事件对象分布在巨大的内存块中。如果 Python 进程想要将内存释放回操作系统,它必须将所有对象移动到一个紧凑的区域,以便释放一个巨大的连续区域。保留内存并在需要时重新使用它对流程来说更容易、更快。

关于Python Google App Engine 无法释放对象数组的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56439727/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com