Openshift - java.lang.OutOfMemoryError:无法创建新的本机线程"

时间:2014-05-01 17:23:04

标签: threadpool native openshift

我在Openshift PAAS上托管了我的应用程序。我的应用程序不会创建线程明确。我一直在跟踪错误

m.sun.jersey.spi.container.ContainerResponse mapMappableContainerException 严重:MappableContainerException中包含的异常无法映射到响应,重新抛出到HTTP容器 java.lang.OutOfMemoryError:无法创建新的本机线程

如何解决错误?当我使用托管服务器时,我没有权限更改ulimit。

1 个答案:

答案 0 :(得分:1)

通常,只要JVM从操作系统询问新线程,您就会遇到“java.lang.OutOfMemoryError:无法创建新的本机线程”。只要底层操作系统无法分配新的本机线程,就会抛出此OutOfMemoryError。本机线程的确切限制取决于平台。

但总的来说,造成java.lang.OutOfMemoryError的情况:无法创建新的本机线程会经历以下阶段:

  1. JVM内部运行的应用程序请求新的Java线程
  2. JVM本机代码代理创建操作系统的新本机线程的请求
  3. OS尝试创建一个新的本机线程,该线程需要将内存分配给线程
  4. 操作系统将拒绝本机内存分配,因为32位Java进程大小耗尽了其内存地址空间,例如: (2-4)已经命中GB进程大小限制或OS的虚拟内存已完全耗尽
  5. java.lang.OutOfMemoryError:无法创建新的本机线程错误。
  6. 通常,OutOfMemoryError触发的新本机线程的限制表示编程错误。当你的应用程序产生数千个线程时,很可能会出现严重问题 - 没有很多应用程序可以从如此庞大的线程中受益