Anzeigen offener Dateideskriptoren ohne Verwendung des Befehls lsof

48

Hallo , ich habe hier , dass lsof ist nicht eine genaue Art und Weise, die Anzahl der Dateideskriptoren bekommen , die gerade geöffnet sind. Er empfahl, stattdessen diesen Befehl zu verwenden

 cat /proc/sys/fs/file-nr

Während dieser Befehl die Anzahl der FDs anzeigt, wie können Sie die Liste der geöffneten Dateideskriptoren anzeigen, die der obige Befehl gerade gezählt hat?

dimas
quelle
4
Sie möchten wahrscheinlich wissen, ob Ihr ulimit überschritten ist, oder? Ich habe darüber unter linuxintro.org/wiki/Is_my_ulimit_exceeded gebloggt . Am wichtigsten ist, dass ulimit eine prozessbezogene Einschränkung ist, die Sie unter / proc / PID / limits finden. Anstelle von lsof würde ich ls / proc / PID / fd verwenden, um die Dateideskriptoren des Prozesses aufzulisten.
Thorsten Staerk

Antworten:

60

Es gibt zwei Gründe, warum lsof | wc -ldie Dateideskriptoren nicht berücksichtigt werden. Zum einen werden Dinge aufgelistet, die nicht geöffnet sind, z. B. geladene dynamisch verknüpfte Bibliotheken und aktuelle Arbeitsverzeichnisse. Sie müssen sie herausfiltern. Ein weiterer Grund ist, dass lsofdie Ausführung einige Zeit in Anspruch nimmt. Dadurch können Dateien übersehen werden, die während der Ausführung geöffnet oder geschlossen werden. daher ist die Anzahl der aufgelisteten offenen Dateien ungefähr. Betrachten /proc/sys/fs/file-nrgibt Ihnen einen genauen Wert zu einem bestimmten Zeitpunkt.

cat /proc/sys/fs/file-nrDies ist nur dann nützlich, wenn Sie die genaue Zahl benötigen, hauptsächlich, um zu überprüfen, ob die Ressourcen erschöpft sind. Wenn Sie die geöffneten Dateien auflisten möchten, müssen Sie eine lsofentsprechende Methode wie das /proc/*/fdmanuelle Trawlen aufrufen oder verwenden .

Gilles 'SO - hör auf böse zu sein'
quelle
1
Hallo, danke für die gute Erklärung, Gilles. Ich habe ls / proc / * / fd ausprobiert und damals alle offenen fds bekommen. Es wird eine Ausgabe mit einer Farbcodierung erstellt, ich muss nur das Handbuch lesen.
Dimas
@dimas- /proc/*/fdVerzeichnisse enthalten symbolische Links zu den geöffneten Dateien. Zur Sichtprüfung verwenden ls -l. Verwenden Sie readlinkzur automatischen Behandlung, um das Verknüpfungsziel zu extrahieren.
Gilles 'SO- hör auf böse zu sein'
Benutze einfach ls -l, aber ich werde mit readlink experimentieren. Ich habe andere / proc / PID / maps und andere Optionen ausprobiert, wie hier angegeben . Kernel.org/doc/man-pages/online/pages/man5/proc.5.html . Nochmals vielen Dank für die zusätzlichen Informationen.
Dimas
1
/ proc / sys / fs / file-nr gibt mir 3872 (und zwei andere Nummern). Wie kann das die Anzahl der Dateien sein, die ich geöffnet habe, wenn ulimit -n 1024 anzeigt?
Thorsten Staerk
1
@ThorstenStaerk Alle Einstellungen von setrlimit(dem Systemaufruf, der dem ulimitShell-Befehl zugrunde liegt ) gelten pro Prozess. Sie wirken sich nur auf den Prozess aus, der den Aufruf ausführt (und indirekt auf die Prozesse, die er später aufgibt).
Gilles 'SO- hör auf böse zu sein'
25

Prozessinformationen werden vom System dynamisch in Verzeichnissen unter / proc gespeichert. Zum Beispiel hat der Prozess mit PID 1234 ein Verzeichnis mit dem Namen / proc / 1234.

Dort sind einige Informationen enthalten, aber Sie interessieren sich gerade für das Unterverzeichnis / proc / 1234 / fd .

ANMERKUNG: Sie benötigen Root-Berechtigungen zum Anzeigen oder Öffnen von Dateien für Prozesse, deren Eigentümer Sie nicht sind, sowie für SetUID-Prozesse.

Beispiel:

root@johan-HP-ProBook-6560b-LG654EA-ACQ:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]

root@johan-HP:/proc# cat 2443/fdinfo/2
pos:    1244446
flags:  0102001

Schauen Sie sich auch die restlichen Dateien unter / proc an ... hier finden Sie viele nützliche Informationen aus dem System.

Johan
quelle