sudo:無法創建套接字:無法分配記憶體
在 OVH 執行的 VPS 上(顯然基於 OpenVZ,
/proc/user_beancounters
存在),執行的程序相對較少,試圖sudo
給我標題中的錯誤。這是一個樣本記錄:
ekleog@ekleog:~$ sudo echo a [sudo] password for ekleog: sudo: unable to create sockets: Cannot allocate memory ekleog@ekleog:~$ free -h total used free shared buffers cached Mem: 8.0G 212M 7.8G 0B 0B 43M -/+ buffers/cache: 168M 7.8G Swap: 128M 0B 128M ekleog@ekleog:~$ sudo echo a sudo: unable to create sockets: Cannot allocate memory
如您所見,分叉沒有問題,因為shell fork to run
free
,但sudo
似乎無法打開套接字。在同一個域中,thunderbird 無法打開 SMTP 連接,但 ssh 不斷地通過隧道傳輸新請求而沒有任何問題。問題源於打開的套接字過多這一事實似乎得到了以下事實的證實:當關閉 Thunderbird(它保留 50 個連接來監視我所有的 IMAP 文件夾)時,問題消失了。此外,重新打開它時,問題不支持,所以一定是某個地方存在資源洩漏?
我目前只有一個使用者(我),所以我希望 OVH 的限制沒有那麼嚴重。
最後,在“危機”期間,我嘗試了跑步
netstat
(不是很習慣它的使用,所以我可能錯了):ekleog@ekleog:~$ netstat -a | wc -l 608 ekleog@ekleog:~$ cat /proc/sys/fs/file-max 1627524
對我來說,這似乎很奇怪
sudo
。你知道如何停止這種情況嗎?它不時出現(大約每隔一天一次),並且變得非常煩人。
顯然問題來自 OpenVZ 設置,就像
/proc/user_beancounters
我有numothersock
一個巨大的failcnt
.為了減少依賴於每個單獨程序的打開套接字的數量,我將提出單獨的問題。
我將在此答案中分享我的發現,希望對將來的某人有所幫助。如果沒有@EEAA 評論中的及時觀察,這些發現是不可能的。
實際上,限制來自 OpenVZ 軟體。該
numothersock
限制可以在文件中看到/proc/user_beancounters
並根據文件:“Parallels Virtuozzo Containers for Linux 中的 UBC 資源”:numothersock - 非 TCP 套接字(本地套接字、UDP 和其他類型的套接字)的最大數量。
您可以使用以下命令檢查套接字的數量
ss
:ss用於轉儲套接字統計資訊。
ss -xa | wc -l
要辨識哪個程序綁定每個套接字:
sudo ss -xap
對於我的具體情況,事實證明我對套接字的限制超過 25% 是由於後綴造成的,所以我減少了(相關問題here)中的
default_process_limit
參數。/etc/postfix/main.cf