【问题标题】:Openshift - java.lang.OutOfMemoryError: unable to create new native thread"Openshift - java.lang.OutOfMemoryError:无法创建新的本机线程”
【发布时间】:2015-05-07 05:38:46
【问题描述】:

我在 Openshift PAAS 上托管了我的应用程序。我的应用程序没有明确创建线程。我一直收到以下错误

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

我该如何解决这个错误?我使用托管服务器时无权更改 ulimit。

【问题讨论】:

    标签: threadpool native openshift


    【解决方案1】:

    通常,当 JVM 向操作系统请求新线程时,您会遇到“java.lang.OutOfMemoryError: Unable to create new native thread”。每当底层操作系统无法分配新的本地线程时,就会抛出这个 OutOfMemoryError。本机线程的确切限制取决于平台。

    但总的来说,导致 java.lang.OutOfMemoryError: Unable to create new native thread 的情况会经历以下几个阶段:

    1. 在 JVM 中运行的应用程序请求一个新的 Java 线程
    2. JVM 本机代码向操作系统代理创建新本机线程的请求
    3. 操作系统尝试创建一个新的本机线程,该线程需要为线程分配内存
    4. 操作系统将拒绝本机内存分配,因为 32 位 Java 进程大小已耗尽其内存地址空间,例如(2-4) 已达到GB进程大小限制或操作系统的虚拟内存已完全耗尽
    5. 抛出 java.lang.OutOfMemoryError: Unable to create new native thread 错误。

    通常情况下,OutOfMemoryError 对新本机线程的限制表明存在编程错误。当您的应用程序产生数千个线程时,很可能出现了严重错误 - 没有多少应用程序可以从如此大量的线程中受益

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多