Virtualization
Docker-compose // OCI 執行時創建失敗 // pthread_create 失敗
最近我租了一個 VPS 作為私人遊樂場和學習 docker。我想在 nginx-proxy 和 docker-letsencrypt-nginx-proxy-companion後面託管一些網路服務。
設置
伺服器執行 Ubuntu 18.04.4 LTS,Docker版本 19.03.6,建構 369ce74a3c,docker-compose版本 1.17.1,建構未知。
4GB vRAM,4vCores(硬體在 Intel Xeon 上執行)
問題
一旦我想執行超過 8 個容器,我就會遇到錯誤。有一些不同的錯誤,我不能特別說明其中哪一個出現的時間:
OCI runtime create failed
例如,當嘗試使用 mysql 將 joomla 作為 compose-project 啟動時:ERROR: for joomla_joomladb_1 Cannot start service joomladb: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v1.linux/moby/741c[...]6e3/log.json: no such file or directory): fork/exec /usr/sbin/runc: resource temporarily unavailable: unknown
socket reset
ERROR: for joomla_joomladb_1 Cannot start service joomladb: read unix @->@/containerd-shim/24f42b8[...]32fa1.sock: read: connection reset by peer: unknown
pthread_create failed: Resource temporarily unavailable
我現在沒有任何相應的日誌。如果錯誤再次發生,我將在此處發布它們。但一條線似乎總是parent id not found
- 分叉失敗。當出現這個錯誤時,我不能再做任何事情了。看下一點:
此外,與此相關的是,有時我在輸入任何命令時會在我的 shell 上遇到一些奇怪的錯誤。當伺服器處於這種狀態時,我既不能 su 到 root 也不能根據命令行重新啟動。你可以看到我試圖
sudo
在這張圖片中輸入:任何命令的錯誤。甚至關機或重啟我試過的
- 我在 Github 和其他一些人上看到了這份報告,並提到了機器上的最大任務限制。我已經將它設置為更高的音量,
infinity
但所有這些似乎都沒有幫助。(我曾經將其更改/etc/systemd/system.conf
為 persystemctl edit docker.service
)。$ systemctl show --property=DefaultTasksMax DefaultTasksMax=4659 $ systemctl status docker ... Tasks: 52 ...
- 我在我的筆記型電腦上安裝了完全相同的系統(除了虛擬化軟體——VPS 在 Virtuozzo 上執行,我在本地使用 Quemu 和 virt-manager)——一切都按預期工作!
- 我嘗試啟動的任何容器都會出現問題。
hello-world
,其他撰寫項目或已建構的項目…- 我聯繫了我的託管服務提供商,也提到了上述問題,並表示他們不會限制任何使用。
現在我發現了問題:託管服務提供商限制了虛擬機的任務數量。該技術稱為使用者 beancounters。
有一個文件,您可以在其中檢查Virtuozzo設置的這些限制,網址為
/proc/user_beancounters
因此,當您知道您的 VPS 託管在 Virtuozzo 上時,您可以
cat
使用此文件或使用此處的腳本來閱讀此資源限制。該文件主要描述了3個欄位:
- hold:資源的目前使用情況
- failcnt : 所有被拒絕的資源分配的數量
- barrier / limit:一個控制參數,一般定義正常的資源分配邊界
(從這裡複製)
如果任何欄位中顯示的值非常高,則意味著這些資源沒有被強制限制。
在我的案例中,關鍵線是
numprocs
. 它告訴機器允許執行的最大任務數。由於docker 容器中的程序也與 VPS 在**同一個核心上執行,因此所有這些都算在內。所以,這裡唯一的解決方案是切換到另一個不使用 Virtuozzo 的主機(就像那樣)!