Proxmox 無法開啟 lxc: Too many open files
問題
今天要新增 LXC Container 時發現無法啟動。
從 Web Admin 開啟 CT 可以看到啟動成功,機器狀態也有看到 running,但沒多久機器狀態又跳回 Stopped。
打開 Host 機的 Console,輸入以下指令嘗試手動開啟:
$ pct start <ctid>
發現沒有用,並且會跳出以下錯誤:
Failed to allocate directory watch: Too many open files
上網搜尋後,發現有不少 PVE 的高用量用戶也碰過這個問題,官方貼了一個答覆,大意是 LXC Container 會使用一個名為 “inotify” 的系統變化通知機制,inotify 在系統中的數量是有限制的,在 PVE 上,預設的 inotify 數量限制是 128。因此,如果你開啟太多 LXC Container,在同時運行時就會耗盡可用的 inotify 資源。
解決方案
解決方法很簡單,就是直接把 inotify 數量限制往上拉就好:
$ sysctl fs.inotify.max_user_instances=512
以上指令可以把 inotify 的數量限制往上拉 4 倍,不過這個指令只是暫時拉高限制而已,如果要永久生效的話則要對 /etc/sysctl.conf 進行變更:
fs.inotify.max_user_instances=512
fs.inotify.max_user_watches=262144
上述參數一樣是將現有數量往上拉 4 倍,如果還是太少的話可以視情況再往上拉,最後執行:
$ sysctl -p
讓他生效就可以了。