web-dev-qa-db-fra.com

Pourquoi le nombre de fichiers-NR et LSOF sur les fichiers ouverts diffère-t-il?

Je rencontre un problème tout à coup; Toutes mes applications et le serveur fonctionnaient bien et tout à coup, je vois le nombre de fichiers ouverts filmer.

Je le contrôle avec cette commande:

cat /proc/sys/fs/file-nr

Quand je vérifie avec cela cela indique 44544 0 128000, SO 44544 est le nombre de fichiers ouverts.

Mais quand je vérifie avec cette commande - lsof | wc -l Il montre - 28384.

Alors, lequel est correct?

Ma limite maximale des fichiers ouverts est 65535

ulimit -a
open files                      (-n) 65535

Je veux connaître les 5 meilleurs processus qui utilisent plus de fichiers ouverts. Je peux obtenir cela de lsof mais le nombre montré ici est très différent de l'autre commande que j'ai mentionnée ci-dessus.

Puis-je obtenir les détails des processus comptés par cette commande cat /proc/sys/fs/file-nr?

Selon le lien mentionné ci-dessous, il est indiqué que nous ne pouvons pas, Comment afficher les descripteurs de fichier ouverts mais n'utilise pas la commande LSOF

Y a-t-il un travail autour pour moi? J'ai besoin de trouver quel processus a commencé à utiliser plus de fichiers ouverts tout à coup.

[~ # ~] Mise à jour [~ # ~] désolé les gars pour le problème. J'ai trouvé l'erreur que je faisais je ne vérifiais pas lsof | wc -l de la racine. C'est la raison pour laquelle je voyais une énorme différence.

toujours il y a une différence entre la sortie du fichier -NR et lsof | wc -l (de racine). Le nombre de lsof est plus que le nombre de fichiers -NR. La raison en est que le fichier -NR -NR ignore certains des répertoires (qui sont considérés comme des fichiers de LSOF) J'ai trouvé cette raison par une recherche limitée sur Google elle-même. de toute façon! Merci les gars pour votre aide!

20
Vasanth Nag K V

Il semble y avoir deux questions en jeu ici. Tout d'abord, la documentation complète des structures de fichiers-nr et de fichier-max peut être trouvée à

https://www.kernel.org/doc/documentation/sysctl/fs.txt

Cela définit les champs de ce fichier comme suit:

Les trois valeurs du fichier-NR désignent le nombre de poignées de fichier allouées, le nombre de poignées de fichier allouées mais non utilisées et le nombre maximal de poignées de fichier. Linux 2.6 Toujours rapporte toujours 0 comme le nombre de poignées de fichier gratuits - ce n'est pas une erreur, cela signifie simplement que le nombre de poignées de fichier allouées correspond exactement au nombre de poignées de fichier utilisés.

J'espère que c'est assez clair. La deuxième question a été répondu dans le fil mentionné ci-dessus ( https://serverfault.com/questions/485262/number-of-file-descriptors-Différent-between-proc-sys-fs-file-nr- and-proc-pi ) et semble se développer soit

  1. "Utilisez lsof" et filtrez la sortie de manière appropriée si vous devez obtenir une bonne approximation des descripteurs de fichiers utilisés par un processus ou,
  2. traverser le système de fichiers/proc (et doit toujours filtrer la sortie) afin d'obtenir un instantané à temps de l'utilisation du descripteur de fichier.

La difficulté d'obtenir des métriques précises pour cela est significative, car le nombre de FD utilisées à tout point peut fluctuer très rapidement sur un système.

Le thread suivant suggère un schéma de filtrage pour l'approche "LSOF":

https://serverfault.com/questions/396872/whay-or-how-does-the-number-of-open-file-descriptors-in-utilisateur-by-root-exded-ulim

8
Thomas N