Virtualization

Docker-compose // OCI 執行時創建失敗 // pthread_create 失敗

  • February 3, 2022

最近我租了一個 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為 per systemctl 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 的主機(就像那樣)!

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