Qu'est-ce qu'un fichier ouvert ?
Un fichier ouvert peut être un fichier normal, un répertoire, un fichier spécial bloc, un fichier spécial caractère, une référence de texte en cours d'exécution, une bibliothèque, un flux ou un fichier réseau.
Qu'est-ce qu'un descripteur de fichier ?
Un descripteur de fichier est une structure de données utilisée par un programme pour obtenir une poignée sur un fichier. Les plus connus sont :
0 for standard in 1 for standard out 2 for standard error
Le nombre de fichiers ouverts est-il égal au nombre de descripteurs de fichiers ouverts ?
Il existe une différence entre le nombre de fichiers actuellement ouverts et le nombre de descripteurs/gestionnaires de fichiers actuels. Même si un fichier est ouvert, il se peut qu'aucun descripteur de fichier ne lui soit associé, comme les répertoires de travail actuels, les fichiers mappés en mémoire et les fichiers texte exécutables.
La commande 'lsof' fournira le nombre de fichiers ouverts associés à un processus. Par exemple, pour le processus avec 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
Il y a au total 51 fichiers ouverts associés au PID 2374 (suffixe).
Pour déterminer le nombre de descripteurs de fichiers ouverts associés à un processus, utilisez ce qui suit. Pour le même processus postfix, 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
Il existe 13 descripteurs de fichiers associés au PID 2374 (suffixe). Nous pouvons voir qu'il y a une différence entre le nombre de fichiers ouverts et le nombre de descripteurs de fichiers par processus. postfix a 51 fichiers ouverts mais seulement 13 descripteurs de fichiers associés. Certains des fichiers ouverts n'ont pas de descripteurs de fichiers associés; par exemple, les bibliothèques, les répertoires de travail actuels.
Comment obtenir le nombre maximum de descripteurs de fichiers ?
Sous Linux, le nombre maximal de descripteurs de fichiers peut être lu à partir de /proc système de fichiers. Pour obtenir la limite actuelle du nombre de descripteurs de fichiers pour l'ensemble du système, utilisez la commande suivante.
# cat /proc/sys/fs/file-max 180451Remarque :Le paramètre /proc/sys/fs/file-max peut être modifié dynamiquement.
Comment calculer le nombre de descripteurs de fichiers actuellement utilisés ?
Utilisez la commande suivante.
# 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
Pour calculer le nombre de descripteurs de fichiers actuellement utilisés :
1344 - 0 = 1344
Comment obtenir les limites par processus sur les descripteurs de fichiers ?
Utilisez 'ulimit -a ‘ pour obtenir les limites par processus.
# 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
Comment trouver le nombre de descripteurs de fichiers ouverts utilisés par un processus donné ?
Utilisez la commande suivante (Remplacez votre PID)
# ls -l /proc/2374/fd | wc -l 13
Quels sont les autres paramètres utiles ?
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.