首页 > 解决方案 > 无法在 OCP 容器中创建多个线程

问题描述

最近,我们的一个容器中出现以下异常,该容器在 Openshift 4.2 中运行 Java 应用程序。这个容器曾经在 Openshift 3.11 上完美运行。

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:717

在容器中,ulimit 看起来非常好。见下图。

超限

在 Openshift 3.11 中,同一个容器可以创建 4096 个线程。但在 Openshift 4.2 中它只能创建 1024 个线程。请看下面的图片,

OCP 3.11 Openshift 3.11

OCP 4.2 在此处输入图像描述

从上面的 ulimits 可以看出,docker 代理级别的配置已经完成。此外,我已经为操作系统分配了足够的内存来创建本机线程。但我不知道这个限制是在哪里设置的。如何增加此全局限制?提前致谢。

标签: kubernetesopenshiftopenshift-originkubernetes-podulimit

解决方案


默认情况下,OpenShift 3 使用docker作为容器运行时,而 OpenShift 4 使用cri-o作为容器运行时。

根据Default pids_limit too low - 默认情况下,使用 cri-o 时限制为 1024 个线程。


推荐阅读