當我打開 Lutris 然後打開 LOL 用戶端時,就會發生這種情況。而且遊戲從來都玩不好。我嘗試了很多方法,但始終無法更改開啟文件限制。如何解決這個問題?
Waiting on children
Waiting on children
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
esync: write: Bad file descriptor
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
esync: write: Bad file descriptor
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
eventfd: Too many open files
還有我的限制訊息
~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15106
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15106
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
答案1
當「開啟檔案過多」錯誤訊息寫入日誌時,表示該進程的所有可用檔案句柄已被使用(也包括套接字)。
在大多數情況下,這是應用程式的某些部分洩漏檔案句柄的結果。
ulimit
是 Unix/Linux 中的一個指令,允許設定所有屬性的系統限制。在您的情況下,您需要將開啟檔案的最大數量增加到一個很大的數字(例如 1000000):
ulimit -n 1000000
或者
sysctl -w fs.file-max=1000000
和/etc/security/limits.conf
/或/etc/sysctl.conf
改變:
fs.file-max = 1000000
若要確定開啟檔案的數量在一段時間內是否增長,請lsof
定期根據 PID 報告開啟檔案。例如:
lsof -p [PID] -r [interval in seconds, 1800 for 30 minutes] > lsof.out
如果您無權存取該lsof
命令,這尤其有用:
ls -al /proc/PID/fd
答案2
跑步
less /proc/PID/limits
檢查最大開啟檔案的實際軟限制。如果您設定了 ulimit 但實際數量仍然很低 - 請檢查您如何啟動流程。例如,systemd 接管 ulimit,您應該在進程層級更好地使用明確設置,以確保您的程式獲得所需的執行時間限制。
答案3
我認為,有不同的情況會導致這種情況發生:
- 系統範圍限制(運行
cat /proc/sys/fs/file-max
以查看限制,對我來說是9223372036854775807
) - 最大用戶實例(運行
cat /proc/sys/fs/inotify/max_user_instances
:曾經是128
) - 硬用戶限制(運行
ulimit -nH
:)1048576
- 軟用戶限制(運行
ulimit -nS
:曾經是1024
)
1. 系統範圍限制
系統範圍的規則可以透過放置來調整
fs.file-max = 9223372036854775807
進入/etc/sysctl.conf
。這個值對我來說不是問題。
2. 最大使用者實例數
對我來說,這個價值太低了。若要修復此問題,請再次新增或編輯此行/etc/sysctl.conf
fs.inotify.max_user_instances = 1024
3. & 4. 硬或軟用戶限制
我的軟用戶限制也太低了。要解決這個問題,請/etc/security/limits.conf
以 root 身分開啟並新增以下行:
<username> soft nofile 100000
(替換<username>
為您的用戶名,或替換*
為所有用戶)
可以透過在上面的行中替換soft
來設定硬用戶限制。hard
當然,您可以為硬限制和軟限製或不同的使用者設定多個規則。
將事情付諸實施
也許登出並重新登入就足以讓更改生效,但我只是重新啟動了系統才能確定。