Linuxでは、プロセスがファイルを開くと、OSは最大オープンファイル制限をチェックします。
制限が1024だった場合、数値はどういう意味ですか?
それは表しますか
_ulimit -a
_コマンドを使用して、システムのソフト制限とハード制限を確認できます。
ソフト制限は任意のユーザーが設定できますが、ハード制限はrootだけが変更できます。制限はプロセスのプロパティです。これらは子プロセスの作成時に継承されるため、システム全体の制限はシステムの初期化中にinitスクリプトで設定し、ユーザーの制限はユーザーのログイン中に、たとえば_pam_limits
_を使用して設定する必要があります。
多くの場合、マシンの起動時にデフォルトが設定されています。そのため、個々のシェルでulimitをリセットしても、再起動時に以前の値にリセットされることがあります。デフォルトを変更する場合は、存在するulimitコマンドのブートスクリプトをgrepすることをお勧めします。
制限が1024の場合、ユーザーまたはプロセスが最大1024ファイルを開くことができることを意味します。この制限を超えると、open
、pipe
およびdup
システムコールは失敗します。
RLIMIT_NOFILE:
このプロセスで開くことができるファイル記述子の最大数よりも1大きい値を指定します。この制限を超えようとすると(
open(2)
、pipe(2)
、dup(2)
など)、エラーEMFILE
が発生します。
これは、開いているファイル記述子プロセスごとの数です。それらはすべて同じファイルまたは異なるファイルを参照できます。
シェルのulimit -a
を使用するか、getrlimit
を使用してプログラムで現在の制限を確認できます。システム全体の制限は/etc/security/limits.conf
で設定されます。
Linuxのファイルシステムオブジェクトモデルは次のとおりです。
file descriptor -> file description -> dentry -> inode
dup
は、同じファイル記述に新しいファイル記述子を作成します。 open
は、新しいファイル記述子とファイルの説明を作成します。
私の理解では、これは開いているファイル(記述子)の最大数ユーザーごとを意味します。
編集:実際、limits.confはユーザーごとにこの値を設定します。
* hard nofile 1024
これはallユーザーのハード制限を意味します(すべてのユーザーについて)
または、次のように設定することもできます。
myuser hard nofile 1024
これは、ユーザーの1024制限を意味しますmyuser
Linuxの場合は、次の出力を確認します。
ulimit -a
Linuxで開いているファイルの数を制限し、開いているファイルの制限を無制限に設定して問題を解決する方法があるため、システムで開いているファイルの数の制限は何であるかがわかります。