ulimit -n(プロセスごとに開かれたファイルの最大数)を設定し、再起動後も設定が維持されるようにしたかったのですが、これが難しいことが判明しました。
設定を許可するために他の場所を変更する必要があるかどうかわかりません。
root@z:~# cat /etc/sysctl.conf | grep file-max
fs.file-max = 2000000
root@z:~# cat /etc/security/limits.conf | grep nofile
# - nofile - max number of open files
* soft nofile 2000000
* hard nofile 2000000
root@z:~# sudo sysctl -p | grep file
fs.file-max = 2000000
root@z:~# ulimit -n 2000000
-su: ulimit: open files: cannot modify limit: Operation not permitted
root@z:~# whoami
root
一方、次のように低い設定が有効です。
ulimit -n 1048576
プロセスごとの制限を2000000に設定する方法と、再起動後にその設定を維持する方法を教えてください。 Ubuntu 18.04を使用しています。
答え1
# ulimit -n 1048576
# ulimit -n 2000000
bash: ulimit: open files: cannot modify limit: Operation not permitted
# sysctl fs.nr_open
fs.nr_open = 1048576
# sysctl fs.nr_open=2000000
fs.nr_open = 2000000
# ulimit -n 2000000
# ulimit -n
2000000
/proc/sys/fs/nr_open
RLIMIT_NOFILE
このファイルは、リソース制限を増やすことができる値に上限を課します(getrlimit(2)を参照)。この上限は、権限のないプロセスと権限のあるプロセスの両方に適用されます。このファイルのデフォルト値は 1048576 です。
一方、file-max
すべてのプロセスの制限は次のとおりです。
/proc/sys/fs/file-max
このファイルは、すべてのプロセスで開かれたファイル数のシステム全体の制限を定義します。この制限に達すると、失敗したシステムコールはENFILEエラーで失敗します。
開いているファイルが十分であれば、他の問題が発生する可能性があるかどうかはまったくわかりません。
答え2
この問題で一時間以上苦労したところで解決しました!
- コンテンツの削除
/etc/security/limits.d/
/etc/security/limits.conf
次のようにファイルを削除して再作成します。vi /etc/security/limits.conf root - nproc 500000 root - nofile 500000 myuser - nproc 130000 myuser - nofile 130000
ログアウトしてログインすると、制限が適用されます。
ulimit -n
500000