我正在使用Google Apps API在目录应用程序上工作,以将所有数据(用户,组,组织,组织单位)从数据存储中存储到数据存储中,然后查询数据存储以显示用户以显示用户搜索和查看。
我正在使用任务对用户和组进行加载。我遵循的方法是读取来自API的数据,然后在循环中创建每个用户的实体,然后寻找NextPagetoken,如果不是null,请分配加载用户的另一个任务。
也正在遵循同样的方法。现在问题是,如果我在具有2K用户的Google域上运行它,则可以正常运行,但是当我在具有90k用户的环境上运行它时,它可以正常运行,直到达到12-13k用户,然后停止响应和任务停止响应,机器上的内存使用率更高,当我还没有将其部署在Appengine上时,我本地Devserver就是这种情况。
我上面描述的方法有很多后端代码,但是我不确定在这里提供什么,因此请问您可能认为可能引起问题的问题。我会在这里粘贴片段,无论需要什么!
实际的生产服务器将拥有两倍的用户数量,即接近200k,这让我非常关注。请帮助!
不要尝试在一个循环中创建所有用户/实体,然后在一个步骤中保存全部,这是不必要的,并且(当您进入其中时)需要更多的内存。<<<<<<<<<<
将其分为较小的组,例如例如,将您的周期限制为100个实体,保存100个实体,然后继续。这样,处理请求的实例就不必将数千个实体保存在内存中。
您提到您正在使用任务进行此操作。您的瓶颈是记忆。通过减少任务创建和保存的实体数量,您有效地增加了执行工作的请求数,并且由于任务处理的实体将更少,您将不仅增加请求数量,而且还会增加请求率。这将导致任务的内存使用量较少,这将向GAE平台提出更频繁地旋转新实例,这意味着您将拥有更多的内存。
因此,在任务中处理更少的实体是减少记忆要求的好方法。