2種類の制限があることを知っておくことが重要です。
- ハード制限は rootのみ設定可能です。これは、ソフト制限の可能な最大値(制限)です。
- ソフト限度は、通常、ユーザによって設定することができます。これは実際の制限です。
単一セッションのソリューション
シェルでソフト制限を設定します。
ulimit -Sn 2048
この例では実際の制限を2048に上げますが、コマンドは、ハード制限(チェック:)がulimit -Hn
同じかそれ以上の場合にのみ成功します。より高い値が必要な場合は、以下のいずれかの方法を使用してハードリミットを引き上げます。制限はプロセスごとに設定され、新しく生成されたプロセスによって継承されるため、同じシェルでこのコマンドの後に実行するものにはすべて新しい制限があります。
単一セッションでハード制限を変更する
rootだけがハード制限を変更でき、rootに切り替えた後、元のユーザーに切り替える必要があるため、これは簡単ではありません。ここに解決策がありますsudo
:
sudo sh -c "ulimit -Hn 9000 ; exec su \"$USER\""
システム全体のソリューション
Debianを使用pam_limits
する他の多くのシステムでは、システム全体の制限を/etc/security/limits.conf
とのファイルに設定できます/etc/security/limits.d
。confファイルには説明が含まれています。行の例:
@webadmins hard nofile 16384
@webadmins soft nofile 8192
これによりwebadmins
、ログイン後にグループ内のユーザーにハード制限とデフォルトのソフト制限が設定されます。
その他の制限
ハード制限値は、オープンファイル記述子のグローバル制限値によって制限されます。この値は/proc/sys/fs/file-max
、最新のLinuxディストリビューションではデフォルトでかなり高くなっています。この値はNR_OPEN
、カーネルのコンパイル中に使用される値によって制限されます。
より良い解決策はありませんか?
*log
フィードするすべてのファイルtail -f
が、監視が必要な本当にアクティブなファイルであるかどうかを確認できます。それらのいくつかはログ記録のためにすでに閉じられている可能性があり、少数のファイルを開くことができます。