web-dev-qa-db-fra.com

Est-il normal que des milliers de fichiers soient ouverts par les programmes Ubuntu?

Après avoir utilisé lsof, comme suggéré dans Trop de fichiers ouverts - Comment trouver le coupable , j'ai constaté que des milliers de fichiers étaient ouverts en raison de programmes de type de système d'exploitation tels que unity-2d-, gnome-do et nautilus. Un seul des 50 meilleurs est un programme de type application (firefox).

lsof | Perl -lane '$x{"$F[0]:$F[1]"}++;
END { print "$x{$_}\t$_" for sort {$x{$a}<=>$x{$b}} keys %x}' | tail -50

lsof: WARNING: can't stat() Fuse.gvfs-Fuse-daemon file system /var/lib/lightdm/.gvfs
      Output information may be incomplete.
216 unity-2d-:26285
216 unity-2d-:31600
216 unity-2d-:2577
239 nautilus:30626
239 nautilus:3777
239 nautilus:31250
239 nautilus:30781
239 nautilus:15101
241 nautilus:26123
241 nautilus:20495
241 nautilus:9627
241 nautilus:31612
241 nautilus:26298
243 nautilus:7672
243 nautilus:603
243 nautilus:21594
243 nautilus:2590
243 nautilus:17574
243 firefox:9768
243 nautilus:12422
247 nautilus:14265
256 gnome-do:31632
256 gnome-do:20519
256 gnome-do:26318
256 gnome-do:9647
256 gnome-do:26143
257 gnome-do:12437
257 gnome-do:14284
257 gnome-do:21612
257 gnome-do:622
257 gnome-do:7686
257 gnome-do:2608
257 gnome-do:17603
270 unity-2d-:3756
270 unity-2d-:30612
272 unity-2d-:15087
277 unity-2d-:12408
277 unity-2d-:21580
278 unity-2d-:2576
278 unity-2d-:14251
278 unity-2d-:587
279 unity-2d-:9613
279 unity-2d-:30768
279 unity-2d-:20481
280 unity-2d-:26109
281 unity-2d-:26284
283 unity-2d-:31599
284 unity-2d-:31235
288 unity-2d-:7658
290 unity-2d-:17559

Est-ce normal ou quelque chose ne va pas?

5
Andrew Grimm

Oui, c'est normal Un système d'exploitation peut avoir des milliers de fichiers ouverts simultanément à tout moment. Par exemple, en ce moment, 5858 fichiers sont ouverts sur mon système.

$ lsof | wc -l
5858

Veuillez noter que, lsof liste par défaut tous les fichiers ouverts par tous les processus. Ainsi, si un processus est accédé par deux processus différents, il y aura deux instances distinctes dans la sortie lsof.

Notez également que les fichiers ne sont pas tous des fichiers normaux. le manuel de lsof dit

Un fichier ouvert peut être un fichier normal, un répertoire, un fichier spécial de bloc, un fichier spécial de caractère, une référence de texte en exécution, une bibliothèque, un flux ou un fichier réseau (socket Internet, fichier NFS ou socket de domaine UNIX). fichier ou tous les fichiers d’un système de fichiers peuvent être sélectionnés par chemin.

Mais il existe une différence subtile entre fichiers ouverts et descripteurs de fichiers ouverts. Voir cet article pour lire ce sujet intéressant. Le point important est

Qu'est-ce qu'un fichier ouvert?

Un fichier ouvert est un fichier utilisé ou s'agit-il d'un descripteur de fichier ouvert? Un descripteur de fichier est une structure de données utilisée par un programme pour obtenir un descripteur sur un fichier, la plus connue étant 0,1,2 pour l'entrée standard, l'entrée standard et l'erreur standard. Le paramètre de noyau file-max fait référence aux descripteurs de fichier ouverts, et fichier-nr nous indique le nombre actuel de descripteurs de fichiers ouverts. Mais lsof répertorie tous les fichiers ouverts, y compris les fichiers n’utilisant pas de descripteurs de fichiers, tels que les répertoires de travail en cours, les fichiers de bibliothèque mappés en mémoire et les fichiers texte exécutables. Pour illustrer notre propos, examinons la différence entre la sortie de lsof pour un pid donné et les descripteurs de fichier répertoriés pour ce pid dans/proc.

Regardez aussi ces liens

3
Anwar