私が望むようにulimit -nを設定することはできません。

私が望むようにulimit -nを設定することはできません。

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(5) マニュアルページ:

/proc/sys/fs/nr_open
RLIMIT_NOFILEこのファイルは、リソース制限を増やすことができる値に上限を課します(getrlimit(2)を参照)。この上限は、権限のないプロセスと権限のあるプロセスの両方に適用されます。このファイルのデフォルト値は 1048576 です。

一方、file-maxすべてのプロセスの制限は次のとおりです。

/proc/sys/fs/file-max
このファイルは、すべてのプロセスで開かれたファイル数のシステム全体の制限を定義します。この制限に達すると、失敗したシステムコールはENFILEエラーで失敗します。

開いているファイルが十分であれば、他の問題が発生する可能性があるかどうかはまったくわかりません。

答え2

この問題で一時間以上苦労したところで解決しました!

  1. コンテンツの削除/etc/security/limits.d/
  2. /etc/security/limits.conf次のようにファイルを削除して再作成します。
    vi /etc/security/limits.conf
    root    -   nproc   500000
    root    -   nofile  500000
    myuser  -   nproc   130000
    myuser  -   nofile  130000
    

ログアウトしてログインすると、制限が適用されます。

ulimit -n
500000

関連情報