In Mac OS X, wie kann ich eine genaue Anzahl von Dateideskriptor Nutzung erhalten?
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
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