我有一个 vServer(16GB RAM,6 vCores),运行 Ubuntu Server(Linux 4.15.0)和一些 docker 容器。
几天前,我部署了一个新容器,但它根本无法启动,并出现来自 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 服务器(Java 11 上的 Forge modded 1.16,没有 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 上也曾问过类似的错误,但没有一个答案能给我带来什么改变。
答案1
最后发现了问题:我的主机提供商在其 OpenVZ 配置中将线程数限制为 700。
我可以看到/proc/user_beancounters
。似乎如果numproc
接近 700,就会发生这些错误。除了减少线程/docker 容器的数量外,我无能为力。