GAE devserver内存不足

时间:2015-05-11 07:43:24

标签: java google-app-engine java-ee google-api google-apps

我正在使用Google Apps API处理目录应用程序,将API中的所有数据(用户,组,组织单位)存储到数据存储中,然后查询数据存储以显示用户进行搜索和查看。

我正在使用任务加载用户和组。我遵循的方法是从API读取数据,然后在循环中创建每个用户的实体,然后查找nextPageToken,如果它不为null,则分配另一个加载用户的任务。对于组和OU也遵循相同的方法。

现在的问题是,如果我在拥有2k用户的google域上运行它,它运行正常,但是当我在具有90K用户的环境上运行它时,它工作正常,直到它达到12-13k用户然后它停止响应和任务停止响应,我的机器上的内存使用率更高,我的本地devserver就是这种情况,因为我还没有在appengine上部署它。

上面介绍的方法后面有很多后端代码,但是我不确定在这里提供什么,所以请提出您认为可能导致问题的问题。无论要求什么,我都会把这个片段粘贴在这里!

实际生产服务器的用户数量将增加一倍,即接近200K,这对我来说很重要。请帮忙!

1 个答案:

答案 0 :(得分:0)

不要尝试在一个循环中创建所有用户/实体,然后在一个步骤中保存所有这些,这是不必要的(当你遇到它时)需要更多的内存。

而是将其分成更小的组,例如例如,将您的周期限制为100个实体,保存100个并继续。这样,处理请求的实例就不必将数千个实体保存在内存中。

您提到过您正在执行此任务。你的瓶颈是记忆。通过减少任务创建和保存的实体数量,您实际上会增加执行作业的请求数量,并且由于任务处理的实体数量会减少,因此您不仅会增加请求数量,还会增加请求率。这将导致任务的内存使用量减少,这将建议GAE平台更频繁地启动新实例,这意味着你将拥有更多的内存。

因此,在任务中处理较少的实体是降低内存需求的一种简单方法。