web-dev-qa-db-ja.com

ヘッドレスユーザーで実行されているデーモンプロセスの最大FD制限を増やす方法

Ubuntu Linuxマシンでヘッドレスユーザーの下で実行されているデーモンプロセスのFD制限を増やすために、/ etc/security/limits.confで次の変更を行いました

soft nofile 10000
hard nofile 10000

また、セッションに必要なpam_limits.soを/etc/pam.d/loginに追加しました。変更は、ログアウトして再度ログインしたすべてのユーザーに反映されました。それらのユーザーの下で開始されている新しいプロセスはすべて、新しいFD制限を取得しています。

ただし、ヘッドレスユーザーで実行されているデーモンの場合、変更は反映されません。ヘッドレスユーザーで実行されているデーモンに変更を反映する方法は何ですか?

5
Ameliorator

Util-linuxの一部であるprlimit(1)を使用して、実行中のプロセスのリソース制限を読み取り/設定できます。

Sudo prlimit --pid PID --nofile 8192:16384
3
nous

問題はデーモンの起動スクリプトにありました。 setuidgidを使用してヘッドレスユーザーでデーモンを実行していました.setuidgidは、プロセスのユーザー/グループを変更するときに、limits.confに設定されているリソース制限をインストールしません。デーモンは、起動スクリプトを介して自身のリソース制限を設定する必要があります。起動スクリプトで現在のセッションの最大FD制限を設定することにより、新しい制限がデーモンに反映されました。これは、デーモンの起動スクリプトに以下のようにulimit-n行を挿入することによって行われました。

ulimit -n $NEW_MAX_LIMIT
exec setuidgid userxyz /pat/to/daemon.sh
3
Ameliorator

再起動すると間違いなく処理されます。しかし、あなたはそれを避けたいと思います。 (誰がしませんか?)

したがって、initプロセスをHUPする必要があります。ほとんどの場合PID 1で実行されますが、システムを再確認することをお勧めします。これは、最も安全な方法ではありませんが、再起動を回避できます。だから、まずテストボックスでこれを試してください:

kill -HUP 1

0