Pourquoi file-nr et lsof countnt sur les files ouverts diffère?

Je suis soudainement confronté à un problème; toutes mes applications et le server fonctionnait bien et tout à coup, je vois le nombre de files ouverts se lever.

Je le vérifie avec cette command:

cat /proc/sys/fs/file-nr 

Lorsque je vérifie cela, il affiche 44544 0 128000 , donc 44544 est le nombre de files ouverts.

Mais quand je vérifie avec cette command – lsof | wc -l lsof | wc -l cela montre – 28384.

Alors, lequel est correct?

Ma limite maximale de files ouverts est 65535

 ulimit -a open files (-n) 65535 

Je veux connaître les 5 principaux process qui utilisent plus de files ouverts. Je peux get ceci de lsof mais le nombre montré ici est très différent de l'autre command que j'ai mentionné ci-dessus.

Puis-je get les détails des process comptés par cette command cat /proc/sys/fs/file-nr ?

Selon le lien ci-dessous, il dit que nous ne pouvons pas, Comment afficher les descripteurs de files ouverts mais n'utilisant pas la command lsof

Y a-t-il un travail pour moi? Je dois find quel process a commencé à utiliser plus de files ouverts tout d'un coup.

MISE À JOUR Désolé les gars pour le problème. J'ai trouvé l'erreur que je faisais je n'étais pas en train de vérifier lsof | wc -l de root. c'est la raison pour laquelle je voyais une énorme différence.

il y a encore une différence entre la sortie du file -nr et lsof | wc -l (de la racine). lsof count est plus que le file -nr count. la raison en est que le file -nr ignore certains des directorys (qui sont considérés comme des files par lsof), j'ai trouvé cette raison par une petite search sur Google lui-même. de toute façon! Merci les gars pour votre aide!

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

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

Cela définit les champs de ce file comme:

Les trois valeurs de file-nr désignent le nombre de descripteurs de files alloués, le nombre de descripteurs de files alloués mais non utilisés et le nombre maximal de descripteurs de file. Linux 2.6 signale toujours 0 comme le nombre de descripteurs de files libres – ce n'est pas une erreur, cela signifie simplement que le nombre de descripteurs de files alloués correspond exactement au nombre de descripteurs de files utilisés.

J'espère que c'est assez clair. La deuxième question a reçu une réponse dans le fil mentionné ci-dessus ( https://serverfault.com/questions/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- pi ) et semble dévoluer soit à

  1. "utiliser lsof" et filterr la sortie de façon appropriée si vous avez besoin d'get une bonne approximation des descripteurs de file utilisés par un process ou,
  2. traversez le système de files / proc (et devez toujours filterr la sortie) afin d'get un instantané dans le time de l'utilisation du descripteur de file.

La difficulté d'get des mesures précises pour cela est importante, étant donné que le nombre de FD utilisés à un moment donné peut fluctuer très rapidement sur un système.

Le fil suivant suggère un schéma de filtrage pour l'approche 'lsof':

https://serverfault.com/questions/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim