我希望我的应用引擎实例(Python)的内存使用率在初始启动期后相对平稳。对我的应用程序的每个请求都是短暂的,似乎不久之后就会发布单个请求的所有内存使用情况。
然而,实际情况并非如此。下面是控制台提供的实例内存使用情况的快照。我的应用程序的流量相对较低,因此我通常只运行一个实例。在图表的两天期间,内存使用趋势不断增加。 (两个点是两个实例短暂运行的地方。)
我经常会出现超出内存的错误,所以我想阻止内存使用率不断增加。
快照时:
我希望在这种情况下实例内存使用量会下降,但它不会发生。
因为我使用Python进行自动垃圾收集,所以我看不出我是如何造成这种情况的。
这是预期的应用引擎行为吗?我能做些什么来修复它吗?
答案 0 :(得分:2)
我发现another answer解释了这里发生的事情的一部分。我将根据答案给出摘要:
使用NDB时,实体存储在上下文缓存中,上下文缓存是内存使用的一部分。
从documentation开始,人们会希望在完成HTTP请求后释放内存。
实际上,在HTTP请求完成后,内存不会被释放。显然,上下文缓存被重用,缓存在下次使用之前被清除,这可能需要很长时间才能完成。
对于我的情况,我将_use_cache=False
添加到大多数实体,以防止它们存储在上下文缓存中。由于我的应用程序的工作方式,我不需要这些实体的上下文缓存,这减少了内存使用。
以上只是部分解决方案!
即使我的大多数实体都关闭了缓存,我的内存使用量仍在不断增加!以下是2.5天内的快照,其中内存从36 MB连续增加到81 MB。这是7月4日周末的低流量。