Warum lsof -p und einfach lsof drastisch unterschiedliche Ergebnisse liefern?

589
Dimitar

Ich habe derzeit ein Limit für offene Dateien von 100000 festgelegt, aber lsof meldet, dass es fast zur Neige geht.

Laufende lsof -n | awk ' | sort | uniq -c | sort -nErgebnisse in:

 1 PID 90321 3979 

Fast das gleiche Ergebnis wird von erhalten lsof -n | grep 3979 | wc -l

Laufen lsof -n -p 3979 | wc -lbringt aber etwas ganz anderes

3930 

Beim Zählen der Dateien wird /proc/3979/fd/auch das kleinere Ergebnis zurückgegeben.

1
Es ist eine kurze Geschichte, keine Frage. Ich kann davon ausgehen, dass die Frage "Warum?" aber es sollte ausdrücklich angegeben werden. Kamil Maciorowski vor 6 Jahren 0

1 Antwort auf die Frage

0
AFH

Ich habe mir die Protokolle dropboxauf meinem System angesehen und sehe vergleichbare Unterschiede.

Wenn ich mir die einzelnen Protokolle genauer anschaue, finde ich, dass dropbox400 Dateien mit lsof -pund 23500 mit geöffnet sindls ... | grep '^dropbox'

Wenn ich mir die lange Liste ansehe, finde ich, dass dropboxes 60 Threads hat, und die meisten der Basis-400-Dateien werden in jedem Thread angezeigt, wodurch der Unterschied erklärt wird.

Was ich nicht weiß, ist, ob sich die Dateihandles in den Threads im Shared Memory befinden oder von den Threads abhängen. Dateizugriffspunkte im gemeinsam genutzten Speicher sollten in der Anzahl der geöffneten Dateien nur einmal gezählt werden.

Mein Befehl zum Zählen der Threads war:

lsof -n | grep "^dropbox " | awk '' | uniq | wc -l 

Wenn sich Ihre Anwendung ähnlich verhält, ist die untere Zahl die realistische.

Beachten Sie, dass alle Zahlen nur Näherungswerte sind: Ich habe ignoriert, wenn Kopfzeilen in die Anzahl und die Einbeziehung der Basis-PID in die Thread-Anzahl einbezogen werden. Da die lsBerichte aus unterschiedlichen Zeiten stammen, können sie niemals vollständig abgeglichen werden.