App Engine实例内存不断增加

时间:2016-06-08 22:14:16

标签: python google-app-engine memory memory-management app-engine-ndb

我希望我的应用引擎实例(Python)的内存使用率在初始启动期后相对平稳。对我的应用程序的每个请求都是短暂的,似乎不久之后就会发布单个请求的所有内存使用情况。

然而,实际情况并非如此。下面是控制台提供的实例内存使用情况的快照。我的应用程序的流量相对较低,因此我通常只运行一个实例。在图表的两天期间,内存使用趋势不断增加。 (两个点是两个实例短暂运行的地方。)

我经常会出现超出内存的错误,所以我想阻止内存使用率不断增加。

快照时:

  • Memcache使用不到1MB
  • 任务队列为空
  • 流量低(0.2次/秒)

我希望在这种情况下实例内存使用量会下降,但它不会发生。

因为我使用Python进行自动垃圾收集,所以我看不出我是如何造成这种情况的。

这是预期的应用引擎行为吗?我能做些什么来修复它吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

我发现another answer解释了这里发生的事情的一部分。我将根据答案给出摘要:

  1. 使用NDB时,实体存储在上下文缓存中,上下文缓存是内存使用的一部分。

  2. documentation开始,人们会希望在完成HTTP请求后释放内存。

  3. 实际上,在HTTP请求完成后,内存不会被释放。显然,上下文缓存被重用,缓存在下次使用之前被清除,这可能需要很长时间才能完成。

  4. 对于我的情况,我将_use_cache=False添加到大多数实体,以防止它们存储在上下文缓存中。由于我的应用程序的工作方式,我不需要这些实体的上下文缓存,这减少了内存使用。

    以上只是部分解决方案!

    即使我的大多数实体都关闭了缓存,我的内存使用量仍在不断增加!以下是2.5天内的快照,其中内存从36 MB连续增加到81 MB。这是7月4日周末的低流量。

    enter image description here