Linux

大多數軟體的 pthread_create 失敗(EAGAIN)

  • January 21, 2022

我有一個執行 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 容器的數量之外,我無能為力。

引用自:https://serverfault.com/questions/1074972