Linuxの場合、プロセスごとのデフォルトのオープンファイル制限は1024です。特定のデーモンではこれでは不十分です。したがって、質問:特定のユーザーの開いているファイルの制限を変更するにはどうすればよいですか?
Linuxの場合、プロセスごとのデフォルトのオープンファイル制限は1024です。特定のデーモンではこれでは不十分です。したがって、質問:特定のユーザーの開いているファイルの制限を変更するにはどうすればよいですか?
回答:
Linuxではlimits.conf
、たとえばを介して構成できます。
# cd /etc/security
# echo debian-transmission - nofile 8192 > limits.d/transmission.conf
(これは、ユーザーdebian-transmissionで開始されたプロセスのハード制限とソフト制限の両方を8192に設定します)
次の方法で変更を確認できます。
# sudo -u debian-transmission bash -c "ulimit -a"
[..]
open files (-n) 8192
[..]
デーモンがすでに実行中の場合は、新しい制限が適用されるようにデーモンを再起動する必要があります。デーモンがユーザーセッションから手動で開始された場合、ユーザーは新しいログインを取得するために再ログインする必要があります。
あるいは、/etc/security/limits.conf
もちろん、で直接追加の制限を指定することもできますが、.d
保守性を高めるためにディレクトリアプローチを使用することをお勧めします。
異なるソフト/ハード制限を適用するには、2つのエントリを使用します。
debian-transmission soft nofile 4096
debian-transmission hard nofile 8192
(この背後にある理論的根拠:ユーザーがログインした後にソフト値が設定されますが、ユーザープロセスは制限をハード制限まで増やすことができます)
limits.conf
/ limits.d
で設定が使用されpam_limits.so
、現在のLinuxディストリビューションではデフォルトで有効になっています、。
Linuxにはシステム全体の制限もあります/proc/sys/fs/file-max
。
このファイルは、すべてのプロセスで開くことができるファイルの数に対するシステム全体の制限を定義します。
たとえば、Ubuntu 10.04のデフォルト:
$ cat /proc/sys/fs/file-max
786046
疑似ファイル/proc/sys/fs/file-nr
はより多くの情報を提供します、例えば
$ cat /proc/sys/fs/file-nr
1408 0 786046
割り当てられたファイルハンドルの数(つまり、現在開かれているファイルの数)。空きファイルハンドルの数。およびファイルハンドルの最大数
したがって、一方で、システム全体のfile-max
制限を調整する必要がある場合があります。これは、その制限が非常に小さい場合や、システムがすでに非常に負荷がかかっている場合です。一方、file-max
pam_limitsメカニズムによって適用されるソフト/ハード制限に影響しないため、単に増加するだけでは不十分です。
file-max
コマンドラインで変更するには(再起動は必要ありません):
# sysctl -w fs.file-max=786046
永続的な変更の場合はfs.file-max=786046
、/etc/sysctl.conf
またはに追加し/etc/sysctl.d
ます。
の上限fs.file-max
はに記録されていfs.nr_open
ます。たとえば、(再度)Ubuntu 10.04の場合:
$ sysctl -n fs.nr_open
1048576
(これは1024 * 1024です)
このsysctlも構成可能です。