我有一个简单的python App Engine应用程序,流量很低(每天3小时的实例活动或多或少)。我正在使用所提供的免费套餐以下的所有内容,我有:
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),如何解决这个问题?
谢谢!
答案 0 :(得分:2)
我怀疑您正在使用任务来处理400个实体的批次。有一个奇怪的怪癖(我称之为一个bug,但谷歌似乎并不这么认为),GAE用任务处理内存清理的方式。当任务完成时,GAE不会立即清理缓存,如果您定期执行任务,则可以加起来。
我的解决方案是定义一些像这样的实体:
class MyEntity(ndb.Model):
_use_cache = False
_use_memcache = False
您还可以在get_multi()
通话中禁用缓存。
对于您正在处理的400个实体,如果您禁用缓存,它可能会为您解决问题。