App Engine实例内存不断增加

4
我希望我的应用引擎实例(Python)在初始启动期后,内存使用量能够相对稳定。每个应用请求的生命周期很短,单个请求的所有内存使用应该很快被释放。
然而,实际情况并非如此。下面是控制台提供的实例内存使用快照。我的应用流量相对较低,因此通常只有一个实例在运行。在图表中的两天时间内,内存使用趋势不断增加。(两个峰值是两个实例短暂运行的时间)
我经常遇到内存超限错误,因此我想防止这种持续增加的内存使用。
在快照时:
- Memcache使用少于1MB - 任务队列为空 - 流量较低(0.2次/秒)
在这种情况下,我希望实例内存使用量会下降,但事实并非如此。
由于我正在使用具有自动垃圾回收功能的Python,我不知道我如何引起这种情况。
这是预期的应用引擎行为吗?我能做些什么来解决它吗?

enter image description here


1
你有找到解决方案吗?我也遇到了同样的问题。 - Sudhanshu Gaur
@SudhanshuGaur,我从未这样做过。我只是接受一个实例偶尔会超出内存限制,崩溃,然后重新启动的事实。只要您运行多个实例,这并不是什么大问题,因为您的应用程序始终可用。 - new name
1个回答

2
我找到了一个其他答案, 解释了这里发生的一部分情况。基于那个答案,我会给出一个总结:
  1. 使用NDB时,实体存储在上下文缓存中,而上下文缓存是您的内存使用的一部分。

  2. 文档中可以看出,预计该内存在完成HTTP请求后被释放。

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

对于我的情况,我正在添加_use_cache=False来防止大多数实体被存储在上下文缓存中。由于我的应用程序的工作方式,我不需要这些实体的上下文缓存,这减少了内存使用量。 但以上只是部分解决方案! 即使我大部分实体的缓存都关闭了,我的内存使用量仍在不断增加!以下是一个持续2.5天的快照,其中内存从36 MB不断增加到81 MB。这是在低流量的7月4日周末发生的。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接