【发布时间】:2012-12-18 15:47:04
【问题描述】:
我可以在一个谷歌应用引擎后端启动多少个并行后台线程?我没有找到任何有关并行允许线程数量的信息。我在 GAE 中使用 Java。
我按照文档中的说明开始了一个新线程:[1]
return ThreadManager.createBackgroundThread(new Runnable() { ... });
如果我运行我的应用程序,一段时间后会抛出以下异常(在创建新线程时):
com.google.appengine.api.system.SystemFailureException: An unknown error occurred
此 [2] 问题提到,如果 API 超出配额,则会出现此异常。所以我可以创建线程,但在一定时间后出现异常。这就是为什么我认为后端有线程限制。
[1]https://developers.google.com/appengine/docs/java/backends/overview#background_threads
[2]http://code.google.com/p/googleappengine/issues/detail?id=7398
【问题讨论】:
-
什么时候开始看到这个问题?例如。当您创建一定数量的线程时会发生这种情况吗?默认后端实例类型仅来自with 128M of memory。根据每个线程的内存占用,您也可能会耗尽内存。在 Python GAE 应用程序中,您实际上可以measure the memory usage of your backend instance through the Runtime API。
-
我编辑了我的问题。是的,我可以毫无问题地在后端创建线程。我正在使用具有 512M 内存的 B4 后端,所以我不认为我的内存不足。但你是对的,当我创建了一定数量的线程时会发生这种情况(但我不知道有多少)。
-
您能否重现该问题以确定发生这种情况时正在运行的线程数?
-
我不能说允许多少线程,但我知道 GAE 有线程限制。我使用任务队列来调用我的后端并做一些工作。过了一会儿,一些任务失败了,但后端没有抛出错误。所以我认为如果达到线程限制,您将无法创建新的后台进程,也无法在后端启动新任务。因此,我不能说允许多少线程:(。我将创建一个答案并展示我或多或少是如何绕过这个问题的。