開いているファイルとは?
開いているファイルは、通常のファイル、ディレクトリ、ブロック スペシャル ファイル、キャラクター スペシャル ファイル、実行中のテキスト参照、ライブラリ、ストリーム、またはネットワーク ファイルです。
ファイル記述子とは?
ファイル記述子は、プログラムがファイルのハンドルを取得するために使用するデータ構造です。最も一般的に知られているものは次のとおりです:
0 for standard in 1 for standard out 2 for standard error
開いているファイルの数は、開いているファイル記述子の数と同じですか?
現在開いているファイルの数と、現在のファイル記述子/ハンドラーの数には違いがあります。ファイルが開いていても、現在の作業ディレクトリ、メモリ マップ ファイル、実行可能テキスト ファイルなど、ファイル記述子が関連付けられていない場合があります。
「lsof」コマンドは、プロセスに関連付けられた開いているファイルの数を提供します。たとえば、PID 4448 のプロセスの場合:
# lsof | grep -w 2374 pickup 2374 postfix cwd DIR 202,1 4096 8945851 /var/spool/postfix pickup 2374 postfix rtd DIR 202,1 4096 128 / pickup 2374 postfix txt REG 202,1 285112 8945807 /usr/libexec/postfix/pickup pickup 2374 postfix mem REG 202,1 62184 463326 /usr/lib64/libnss_files-2.17.so pickup 2374 postfix mem REG 202,1 155744 758332 /usr/lib64/libselinux.so.1 pickup 2374 postfix mem REG 202,1 15688 125778 /usr/lib64/libkeyutils.so.1.5 pickup 2374 postfix mem REG 202,1 58728 127331 /usr/lib64/libkrb5support.so.0.1 pickup 2374 postfix mem REG 202,1 11384 37284 /usr/lib64/libfreebl3.so ....
# lsof | grep -w 2374 | wc -l 51
PID 2374 (接尾辞) に関連付けられた合計 51 個の開いているファイルがあります。
プロセスに関連付けられている開いているファイル記述子の数を確認するには、次を使用します。同じ後置プロセスの場合、2374:
# ls -l /proc/2374/fd total 0 lrwx------. 1 root root 64 Nov 18 18:06 0 -> /dev/null lrwx------. 1 root root 64 Nov 18 18:06 1 -> /dev/null l-wx------. 1 root root 64 Nov 18 18:06 10 -> pipe:[28867] lrwx------. 1 root root 64 Nov 18 18:06 2 -> /dev/null lr-x------. 1 root root 64 Nov 18 18:06 3 -> pipe:[18701] l-wx------. 1 root root 64 Nov 18 18:06 4 -> pipe:[18701] lrwx------. 1 root root 64 Nov 18 18:06 5 -> socket:[18631] lrwx------. 1 root root 64 Nov 18 18:06 6 -> socket:[18629] lrwx------. 1 root root 64 Nov 18 18:06 7 -> socket:[28851] lrwx------. 1 root root 64 Nov 18 18:06 8 -> anon_inode:[eventpoll] lr-x------. 1 root root 64 Nov 18 18:06 9 -> pipe:[28867] l-wx------. 1 root root 64 Nov 18 18:06 92 -> pipe:[18702]
# ls -l /proc/2374/fd | wc -l 13
PID 2374 (後置) に関連付けられた 13 個のファイル記述子があります。開いているファイルの数とプロセスごとのファイル記述子の数に違いがあることがわかります。 postfix には 51 個の開いているファイルがありますが、それに関連付けられているファイル記述子は 13 個しかありません。開いているファイルの中には、ファイル記述子が関連付けられていないものがあります。例:ライブラリ、現在の作業ディレクトリ。
ファイル記述子の最大数を取得する方法
Linux では、/proc から読み取ることができるファイル記述子の最大数の制限 ファイルシステム。システム全体のファイル記述子数の現在の制限を取得するには、次のコマンドを使用します。
# cat /proc/sys/fs/file-max 180451注意 :パラメータ /proc/sys/fs/file-max 動的に変更できます。
現在使用されているファイル記述子の数を計算する方法
次のコマンドを使用してください。
# cat /proc/sys/fs/file-nr 1344 0 180451 | | |_ Max no. of file descriptors allowed on the system | | | |__ Total free allocated file descriptors | |__ Total allocated file descriptors
現在使用されているファイル記述子の数を計算するには:
1344 - 0 = 1344
ファイル記述子のプロセスごとの制限を取得する方法
「ulimit -a」を使用 ‘ プロセスごとの制限を取得します。
# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7132 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 4096 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 7132 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
特定のプロセスで使用されているオープン ファイル記述子の数を確認するにはどうすればよいですか?
次のコマンドを使用します (PID を置き換えます)
# ls -l /proc/2374/fd | wc -l 13
他に役立つパラメータは何ですか?
NR_OPEN = Maximum number of open files per process NR_FILE = Total number of files that can be open in the system at any time FILE-MAX = Kernel parameter refers to maximum number of file descriptors allowed per system FILE-NR = Refers to the number of current file descriptors used at any moment. LSOF = Gives the number of open files.