Cos'è un file aperto?
Un file aperto può essere un file normale, una directory, un file speciale di blocco, un file speciale di carattere, un riferimento di testo in esecuzione, una libreria, un flusso o un file di rete.
Cos'è il descrittore di file?
Un descrittore di file è una struttura di dati utilizzata da un programma per ottenere un handle su un file. I più conosciuti sono:
0 for standard in 1 for standard out 2 for standard error
Il numero di file aperti è uguale al numero di descrittori di file aperti?
C'è una differenza nel numero di file aperti correnti e nel numero di descrittori/gestori di file correnti. Anche se un file è aperto, potrebbe non avere un descrittore di file ad esso associato, come le directory di lavoro correnti, i file mappati in memoria e i file di testo eseguibili.
Il comando 'lsof' fornirà il numero di file aperti associati a un processo. Ad esempio, per il processo con 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
Ci sono un totale di 51 file aperti associati al PID 2374 (postfisso).
Per determinare il numero di descrittori di file aperti associati a un processo, utilizzare quanto segue. Per lo stesso processo suffisso, 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
Esistono 13 descrittori di file associati al PID 2374 (postfisso). Possiamo vedere che c'è una differenza tra il numero di file aperti e il numero di descrittori di file per processo. postfix ha 51 file aperti ma solo 13 descrittori di file ad esso associati. Ad alcuni dei file aperti non sono associati descrittori di file; ad esempio, biblioteche, directory di lavoro correnti.
Come ottenere il numero massimo di descrittori di file?
In Linux, il numero massimo di descrittori di file limite può essere letto da /proc file system. Per ottenere il limite corrente del numero di descrittori di file per l'intero sistema utilizzare il comando seguente.
# cat /proc/sys/fs/file-max 180451Nota :Il parametro /proc/sys/fs/file-max può essere modificato in modo dinamico.
Come calcolare il numero di descrittori di file attualmente utilizzati?
Usa il seguente comando.
# 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
Per calcolare il numero di descrittori di file attualmente utilizzati:
1344 - 0 = 1344
Come ottenere i limiti per processo sui descrittori di file?
Usa 'ulimit -a ' per ottenere i limiti per processo.
# 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
Come si trova il numero di descrittori di file aperti utilizzati da un determinato processo?
Usa il comando seguente (Sostituisci il tuo PID)
# ls -l /proc/2374/fd | wc -l 13
Quali sono altri parametri utili?
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.