ユーザーのプロセスオープンファイル制限を設定するにはどうすればよいですか?


8

Linuxの場合、プロセスごとのデフォルトのオープンファイル制限は1024です。特定のデーモンではこれでは不十分です。したがって、質問:特定のユーザーの開いているファイルの制限を変更するにはどうすればよいですか?

回答:


16

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


1
最後の情報をありがとう-私は/etc/security/limits.confで1048576を超えるユーザーnofile制限を設定できない理由を理解しようと頭を
悩ませていました
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.