0

我们如何避免 OutOfMemoryError 异常?

App Engine 调度程序根据响应时间启动实例,但我们需要在现有实例超出其内存配额时启动新实例。

我们的 GAE 实例处理不同文件大小的多个并发上传请求。每当一个实例处理太多并发上传(使用堆空间来复制上传的字节)时,该实例就会崩溃并出现 java.lang.OutOfMemoryError: Java heap space。

我们已经看到其他帖子建议使用具有更多内存的实例类或使用后端。但是我们必须转移到后端来避免这种情况吗?或者有没有办法鼓励普通的 GAE 实例调度程序不要向接近内存限制的实例发送新请求?

4

1 回答 1

1

请改用blobstore 上传处理程序。上传首先通过 blob 上传处理程序,该处理程序剥离 blob 数据并将其保存到 blobstore,然后调用您的处理程序(并传递保存的 blob 密钥和其他请求数据)。

这有两个优点:

  1. 您的前端不涉及处理 blob 数据,因此这不应产生 OOM 错误。

  2. 上传可以大于 32Mb,否则对于所有前端请求都是限制的。

于 2013-01-20T19:03:18.210 回答