In Mac OS X, wie kann ich eine genaue Anzahl von Dateideskriptor Nutzung erhalten?

StackOverflow https://stackoverflow.com/questions/795236

  •  18-09-2019
  •  | 
  •  

Frage

Unter Linux können ulimit -n verwendet werden, zu ändern oder die Begrenzung der Anzahl von Datei-Deskriptoren für einen Prozess zu sehen, und lsof -p nnn | wc -l scheint konsequent die tatsächliche Dateideskriptors Nutzung zu melden.

Aber auf Mac OS X, lsof -p nnn | wc -l kann eine Zahl höher als die Grenze zurück. Ich nehme an, dies bedeutet lsof mehr zurückkehrt als nur Deskriptoren Datei, aber ich kann nicht sagen, was was ist.

Fazit: Wie kann ich eine genaue Anzahl von Dateideskriptor Verwendung in Mac OS X erhalten

War es hilfreich?

Lösung

lsof kann eine Menge Dinge zeigen darüber hinaus nur Deskriptoren Datei, aber die meisten von dem, was Ihre Zählung wird wahrscheinlich Aufpumpen ist die geladene Frameworks und Bibliotheken für eine Anwendung. Sie können an der „FD“ Spalte, um zu sehen, ob eine Zeile ein Dateideskriptor ist - in diesem Fall ist es eine Zahl ist, möglicherweise gefolgt von einem Buchstaben den Modus anzeigt - oder etwas anderes (siehe die Beschreibung der FD-Säule in der lsof Manpage für die vollständige Liste).

Wenn Sie nur eine grobe Annäherung Hinzufügen eines ‚grep -v‚txt‘‘ vor Ihrem WC erhalten Sie einen genauen Wert ein gutes Stück näher. Wenn Sie einen genauen Wert benötigen, müssen Sie wahrscheinlich zusammen einen regulären Ausdruck bringen um die Ausgabe zu durchschlagen, dass gerade durch die FD-Säule Filer.

Andere Tipps

Ich kam über die Notwendigkeit dieses kürzlich identifiziert - der Befehl, den ich verwende, um die Gesamtanzahl der Einträge zu zählen (so mehr als nur Griffe Datei, aber seine relative so deshalb relevant imo) ist:

lsof | awk '{print $1}' | uniq -c | sort -rn | head

Das gibt so etwas wie die folgende Ausgabe (Ihre höchsten verwendeten Anwendungen können unterschiedlich sein!):

$lsof | awk '{print $1}' | uniq -c | sort -rn | head
3271 com.apple
2978 Google
 914 Atom\x20H
 505 Skype
 476 Microsoft
 375 Screenher
 304 Finder
 292 Dock
 277 Atom\x20H
 270 Atom\x20H

ich in der Regel nur noch die Top 10 Einträge zu sehen, aber Sie können head manipulieren, wie viele Zeilen zu zeigen, wie Sie mögen.

I modifizierte Antwort anders, jetzt ist es zeigt nur die geöffnet fd Zahlen eines bestimmten Prozesses:

FCOUNT=`lsof -p $1 | grep -v " txt " | wc -l`;echo "PID: $1 $FCOUNT" | sort -nk3

Beispiel:

$ ./fd-count.sh 5926                                                                                                           
PID: 5926       97

Ich war auf der Suche für das Verfahren, das viele Dateideskriptoren hatte - also denke ich, so etwas wie

for pid in `ps aux | tail -n +2 | awk '{print $2}'`; do FCOUNT=`lsof -p $pid | grep -v " txt " | wc -l`; echo "PID: $pid $FCOUNT"; done | sort -nk3
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top