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も構成可能です。