web-dev-qa-db-ja.com

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

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

8
maxschlepzig

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

16
maxschlepzig