Warum unterscheiden sich Datei-Nr und Anzahl der offenen Dateien? [geschlossen]

19

Plötzlich stoße ich auf ein Problem. Alle meine Anwendungen und der Server liefen einwandfrei, und plötzlich wird die Anzahl der geöffneten Dateien angezeigt.

Ich überprüfe es mit diesem Befehl:

cat /proc/sys/fs/file-nr

Wenn ich das überprüfe 44544 0 128000, wird angezeigt, dass 44544 die Anzahl der geöffneten Dateien ist.

Aber wenn ich mit diesem Befehl überprüfe - lsof | wc -l es zeigt - 28384.

Welches ist also richtig?

Mein maximales Limit für offene Dateien ist 65535

ulimit -a
open files                      (-n) 65535

Ich möchte die Top-5-Prozesse kennen, bei denen mehr offene Dateien verwendet werden. Ich kann dies von bekommen, lsofaber die hier gezeigte Anzahl unterscheidet sich sehr von dem anderen Befehl, den ich oben erwähnt habe.

Kann ich die Details der von diesem Befehl gezählten Prozesse abrufen cat /proc/sys/fs/file-nr?

Laut dem unten angegebenen Link können wir keine offenen Dateideskriptoren anzeigen, aber nicht mit dem Befehl lsof

Gibt es eine Arbeit für mich? Ich muss herausfinden, welcher Prozess plötzlich mit mehr offenen Dateien begonnen hat.

UPDATE Sorry Leute für die Mühe. Ich habe den Fehler gefunden, den ich gemacht habe, ich habe NICHT lsof | wc -l von root aus überprüft. Das ist der Grund, warum ich einen großen Unterschied sah.

Trotzdem gibt es einen Unterschied zwischen der Ausgabe von Datei -nr und lsof | wc -l (von root). lsof count ist mehr als file -nr count. der grund dafür ist, dass die datei -nr einige der verzeichnisse ignoriert (die von lsof als dateien betrachtet werden). ich habe diesen grund durch eine kleine recherche bei google selbst gefunden. Sowieso! Danke Jungs für all die Hilfe!

Vasanth Nag KV
quelle
Zeigt lsof | wc -l wirklich eine negative Zahl?
Joe Sewell
3
das war kein negatives Zeichen, es ist ein Bindestrich!
Vasanth Nag KV

Antworten:

8

Hier scheinen zwei Fragen im Spiel zu sein. Eine vollständige Dokumentation der Strukturen file-nr und file-max finden Sie unter

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

Dies definiert die Felder in dieser Datei als:

Die drei Werte in file-nr geben die Anzahl der zugewiesenen Dateihandles, die Anzahl der zugewiesenen, aber nicht verwendeten Dateihandles und die maximale Anzahl der Dateihandles an. Linux 2.6 gibt immer 0 als Anzahl der freien Datei-Handles an - dies ist kein Fehler, sondern bedeutet nur, dass die Anzahl der zugewiesenen Datei-Handles genau mit der Anzahl der verwendeten Datei-Handles übereinstimmt.

Hoffentlich ist das klar genug. Die zweite Frage wurde im oben genannten Thread beantwortet ( /server/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc-). pi ) und scheint sich entweder zu entwickeln

  1. "use lsof" und filtern Sie die Ausgabe entsprechend, wenn Sie eine gute Annäherung an die Dateideskriptoren benötigen, die von einem Prozess verwendet werden, oder
  2. Durchsuchen Sie das / proc-Dateisystem (und müssen Sie die Ausgabe noch filtern), um eine Momentaufnahme der Dateideskriptornutzung zu erhalten.

Die Schwierigkeit, hierfür genaue Metriken zu erhalten, ist erheblich, da die Anzahl der an einem bestimmten Punkt verwendeten FDs auf einem System sehr schnell schwanken kann.

Der folgende Thread schlägt ein Filterschema für den 'lsof'-Ansatz vor:

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

Thomas N
quelle
hat meine Frage aktualisiert. aber danke für all die infos da oben.
Vasanth Nag KV
Aber wie ist es möglich, als ulimitfür mich sagt, ich kann bis zu 1024 Dateien öffnen, wenn lsof | wc -lich schon 1545 besitze?
Nakilon
Bitte lesen Sie die Handbuchseiten auf lsofund ulimitfür die Antwort auf Ihre Frage.
Thomas N