Google App Engine实例内存错误

时间:2018-05-24 09:48:49

标签: python google-app-engine memory-leaks

我有一个简单的python App Engine应用程序,流量很低(每天3小时的实例活动或多或少)。我正在使用所提供的免费套餐以下的所有内容,我有:

  • 具有自动缩放功能的F1实例
  • 1/2 MB的Memcache
  • 我对ndb.get_multi()进行“大量”使用(每次请求只有少量请求400个实体,但这400个实体仅重3MB)

问题是我每2/3天会随机收到一次Exceeded soft private memory limit of 128 MB with 131 MB after servicing 93 requests total错误,但没有请求该应用无法单独处理。

我试图在每个请求结束时调用gc.collect()但是在为请求提供服务后内存量不断增加。

如果不升级到性能更高的实例(F2),如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

我怀疑您正在使用任务来处理400个实体的批次。有一个奇怪的怪癖(我称之为一个bug,但谷歌似乎并不这么认为),GAE用任务处理内存清理的方式。当任务完成时,GAE不会立即清理缓存,如果您定期执行任务,则可以加起来。

我的解决方案是定义一些像这样的实体:

class MyEntity(ndb.Model):
    _use_cache = False
    _use_memcache = False

您还可以在get_multi()通话中禁用缓存。

对于您正在处理的400个实体,如果您禁用缓存,它可能会为您解决问题。