【发布时间】:2021-01-02 00:10:33
【问题描述】:
我建立了一个简单的新闻聚合器站点,其中我所有 App Engine 实例的内存使用量不断增长,直到达到限制并因此被关闭。
我已经开始从我的应用程序中删除所有内容,以达到最小的可重现版本。这就是我现在拥有的:
app = Flask(__name__)
datastore_client = datastore.Client()
@app.route('/')
def root():
query = datastore_client.query(kind='source')
query.order = ['list_sequence']
sources = query.fetch()
for source in sources:
pass
统计数据显示了典型的锯齿模式:在实例启动时,它达到 190 - 210 Mb,然后在一些请求(但不是所有请求)时,内存使用量增加 20 - 30 Mb。 (顺便说一下,这大致对应于查询结果的估计大小,尽管我不能确定这是相关信息。)这种情况一直发生,直到超过 512 Mb,当它被关闭时。它通常发生在对“/”的第 50 到 100 个请求左右。在此期间,没有其他任何请求。
现在,如果我消除“for”循环,只剩下查询,问题就消失了,内存使用量保持在 190 Mb 不变,即使在 100 多个请求之后也没有增加。
gc.collect() 最后没有帮助。我也试过查看函数开头和结尾的 tracemalloc stats 的差异,我没有发现任何有用的东西。
请问有没有人遇到过类似的情况?有什么想法可能会出错吗?您可以推荐哪些额外的测试/调查?这可能是我无法控制的 Google App Engine/Datastore 问题吗?
谢谢。
【问题讨论】:
标签: python google-app-engine flask google-cloud-datastore