Linux
大多數軟體的 pthread_create 失敗(EAGAIN)
我有一個執行 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 容器的數量之外,我無能為力。