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
最大オープンファイルの実際のソフト制限を確認します。ulimits を設定したが、実際の数がまだ低い場合は、プロセスの起動方法を確認してください。たとえば、systemd が ulimits を引き継ぐ場合、プログラムが必要な実行時制限を確実に取得できるように、プロセス レベルでの明示的な設定を使用する必要があります。
答え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
。もちろん、ハード制限とソフト制限、または異なるユーザーに対して複数のルールを設定することもできます。
物事を実行する
ログアウトして再度ログインするだけで変更が反映されるかもしれませんが、念のためシステムを再起動しました。