我有一个运行 Ubuntu Server (Linux 4.15.0) 和几个 docker 容器的 vServer(16GB RAM,6 个 vCore)。
几天前,我部署了一个新容器,它会拒绝启动来自 docker-compose 的奇怪的原生故障转储,其中大部分包括以下错误消息:
fork/exec /usr/bin/containerd-shim-runc-v2: resource temporarily unavailable: unknown
runtime/cgo: pthread_create failed: Resource temporarily unavailable SIGABRT:
failed to create new OS thread (have 5 already; errno=11) runtime: may need to increase max user processes (ulimit -u)
之后,许多以前工作的容器也发生了这种情况。但是,我重新启动了 dockerd 和我所有的容器,问题似乎消失了。
今天,我想启动我的 Minecraft 服务器(Forge modded 1.16 on Java 11 without docker),问题又回来了:
[136,281s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached.
到目前为止最奇怪的是,它无法打开 TTY 设备?:
java.io.IOException: Cannot run program "stty": error=11, Resource temporarily unavailable
在这些消息之后,SSH 会话刚刚锁定,第二个终端向我显示我没有达到 的单个限制ulimit -a
,并且在运行 Minecraft 时我仍然有 9GB 的可用RAM 。htop
显示 90 个任务正在运行。我已经使用 Linux 服务器多年了,从未见过这样的错误——这可能是什么原因?
我知道以前在 SF 上曾问过此类错误,但没有一个答案对我有任何改变。
终于发现问题了:我的宿主在他们的 OpenVZ 配置中将线程数限制为 700。
我可以在
/proc/user_beancounters
. 似乎如果numproc
接近 700,就会发生这些错误。除了减少线程/ docker 容器的数量之外,我无能为力。