Pourquoi file-nr et lsof comptent sur des fichiers ouverts diffère? [fermé]

19

Je rencontre tout à coup un problème; toutes mes applications et le serveur fonctionnaient bien et tout d'un coup je vois le nombre de fichiers ouverts monter.

Je le vérifie avec cette commande:

cat /proc/sys/fs/file-nr

Lorsque je vérifie cela, cela montre 44544 0 128000que 44544 est le nombre de fichiers ouverts.

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

Alors, lequel est correct?

Ma limite maximale de fichiers ouverts est de 65535

ulimit -a
open files                      (-n) 65535

Je veux connaître les 5 meilleurs processus qui utilisent des fichiers plus ouverts. Je peux l'obtenir depuis lsofmais le nombre indiqué 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 dit que nous ne pouvons pas, Comment afficher les descripteurs de fichiers ouverts mais pas en utilisant la commande lsof

Y a-t-il un travail pour moi? J'ai besoin de trouver le processus qui a commencé à utiliser des fichiers plus ouverts tout d'un 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 à partir de la racine. c'est la raison pour laquelle je voyais une énorme différence.

il y a toujours une différence entre la sortie du fichier -nr et lsof | wc -l (à partir de la racine). Le nombre de lsof est supérieur au nombre de fichiers -nr. la raison en est que le fichier -nr ignore certains des répertoires (qui sont considérés comme des fichiers par lsof). J'ai trouvé cette raison par une petite recherche sur google lui-même. de toute façon! Merci les gars pour votre aide!

Vasanth Nag KV
la source
Affiche lsof | wc -l vraiment un nombre négatif?
Joe Sewell
3
ce n'était pas un signe négatif, c'est un trait d'union!
Vasanth Nag KV du

Réponses:

8

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 sur

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

Cela définit les champs de ce fichier comme:

Les trois valeurs de file-nr indiquent le nombre de descripteurs de fichier alloués, le nombre de descripteurs de fichier alloués mais inutilisés et le nombre maximal de descripteurs de fichier. Linux 2.6 rapporte toujours 0 comme le nombre de descripteurs de fichiers libres - ce n'est pas une erreur, cela signifie simplement que le nombre de descripteurs de fichiers alloués correspond exactement au nombre de descripteurs de fichiers utilisés.

J'espère que c'est assez clair. La deuxième question a été répondue dans le fil mentionné ci-dessus ( /server/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- pi ) et semble appartenir soit à

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

La difficulté d'obtenir des métriques précises pour cela est importante, car 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»:

/server/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim

Thomas N
la source
mis à jour ma question. mais merci pour toutes les informations là-haut.
Vasanth Nag KV du
Mais comment est-ce possible, alors que ulimitpour moi dit que je peux avoir jusqu'à 1024 fichiers ouverts, si lsof | wc -ldit que j'ai déjà 1545?
Nakilon
Veuillez lire les pages de manuel sur lsofet ulimitpour la réponse à votre question.
Thomas N