最近,我们在 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 个线程。请参阅下面的图片,
从上面的ulimits可以明显看出docker代理级别的配置已经完成。另外,我已经为操作系统分配了足够的内存来创建 native 线程。但我不知道这个限制是在哪里设置的。我怎样才能增加这个全局限制?提前致谢。
最佳答案
默认情况下,OpenShift 3 使用 docker 作为容器运行时,而 OpenShift 4 使用 cri-o作为容器运行时。
根据Default pids_limit too low - 默认情况下,使用 cri-o 时线程数限制为 1024 个。
关于kubernetes - 无法在 OCP 容器中创建多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59588612/