Co je otevřený soubor?
Otevřeným souborem může být běžný soubor, adresář, blokový speciální soubor, znakový speciální soubor, spouštěcí textový odkaz, knihovna, stream nebo síťový soubor.
Co je deskriptor souboru?
Deskriptor souboru je datová struktura, kterou program používá k získání popisovače souboru. Nejznámější jsou:
0 for standard in 1 for standard out 2 for standard error
Je počet otevřených souborů roven počtu otevřených deskriptorů souborů?
Je rozdíl v počtu aktuálně otevřených souborů a počtu aktuálních deskriptorů/obslužných rutin souborů. I když je soubor otevřený, nemusí mít přidružený deskriptor souboru, jako jsou aktuální pracovní adresáře, soubory mapované v paměti a spustitelné textové soubory.
Příkaz „lsof“ poskytne počet otevřených souborů spojených s procesem. Například pro proces s 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
Existuje celkem 51 otevřených souborů spojených s PID 2374 (postfix).
Chcete-li určit počet otevřených deskriptorů souborů spojených s procesem, použijte následující. Pro stejný postfixový proces 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
K PID 2374 (postfix) je přidruženo 13 deskriptorů souborů. Vidíme, že existuje rozdíl mezi počtem otevřených souborů a počtem deskriptorů souborů na proces. postfix má 51 otevřených souborů, ale s ním spojených pouze 13 deskriptorů souborů. Některé z otevřených souborů nemají přidružené deskriptory souborů; např. knihovny, aktuální pracovní adresáře.
Jak získat maximální počet deskriptorů souborů?
V Linuxu lze limit maximálního počtu deskriptorů souborů přečíst z /proc souborový systém. Chcete-li získat aktuální limit počtu deskriptorů souborů pro celý systém, použijte následující příkaz.
# cat /proc/sys/fs/file-max 180451Poznámka :Parametr /proc/sys/fs/file-max lze dynamicky měnit.
Jak vypočítat počet aktuálně používaných deskriptorů souborů?
Použijte následující příkaz.
# 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
Chcete-li vypočítat počet aktuálně používaných deskriptorů souborů:
1344 - 0 = 1344
Jak získat limity pro jednotlivé procesy u deskriptorů souborů?
Použijte ‘ulimit -a ‘, abyste získali limity pro jednotlivé procesy.
# 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
Jak lze zjistit počet otevřených deskriptorů souborů používaných daným procesem?
Použijte následující příkaz (Nahraďte PID)
# ls -l /proc/2374/fd | wc -l 13
Jaké jsou další užitečné parametry?
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.