GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Überprüfen Sie das offene FD-Limit für einen bestimmten Prozess in Linux

Sie können versuchen, ein Skript zu schreiben, das regelmäßig lsof -p {PID} aufruft auf gegebener PID.


um die Top 20 Dateihandles mit Prozessen zu sehen:

for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`;done | sort -n -r | head -n 20

die Ausgabe erfolgt im Format file handle count, pid, cmndline for process

Beispielausgabe

701 1216 /sbin/rsyslogd-n-c5
169 11835 postgres: spaceuser spaceschema [local] idle
164 13621 postgres: spaceuser spaceschema [local] idle
161 13622 postgres: spaceuser spaceschema [local] idle
161 13618 postgres: spaceuser spaceschema [local] idle

Zählen Sie die Einträge in /proc/<pid>/fd/ . Die für das Verfahren geltenden harten und weichen Grenzen sind in /proc/<pid>/limits zu finden .


Die einzigen vom Linux-Kernel bereitgestellten Schnittstellen zum Abrufen von Ressourcenbeschränkungen sind getrlimit() und /proc/ pid /limits . getrlimit() kann nur Ressourcengrenzen des aufrufenden Prozesses erhalten. /proc/ pid /limits ermöglicht es Ihnen, die Ressourcengrenzen jedes Prozesses mit derselben Benutzer-ID abzurufen, und ist auf RHEL 5.2, RHEL 4.7, Ubuntu 9.04 und jeder Distribution mit Kernel 2.6.24 oder höher verfügbar.

Wenn Sie ältere Linux-Systeme unterstützen müssen, müssen Sie den Prozess selbst dazu bringen, getrlimit() aufzurufen . Der einfachste Weg, dies zu tun, besteht natürlich darin, das Programm oder eine Bibliothek, die es verwendet, zu modifizieren. Wenn Sie das Programm ausführen, können Sie LD_PRELOAD verwenden eigenen Code in das Programm zu laden. Wenn nichts davon möglich ist, können Sie sich mit gdb an den Prozess anhängen und ihn den Aufruf innerhalb des Prozesses ausführen lassen. Sie können dasselbe auch selbst mit ptrace() tun an den Prozess anzuhängen, den Aufruf in seinen Speicher einzufügen usw. Dies ist jedoch sehr kompliziert und wird nicht empfohlen.

Mit den entsprechenden Privilegien wären die anderen Möglichkeiten, dies zu tun, das Durchsuchen des Kernel-Speichers, das Laden eines Kernel-Moduls oder das Ändern des Kernels auf andere Weise, aber ich gehe davon aus, dass dies nicht in Frage kommt.


Linux
  1. Wie berechnet man die CPU-Auslastung eines Prozesses durch PID in Linux von C?

  2. Python-Bibliothek für das Linux-Prozessmanagement

  3. Linux-Skript, um zu überprüfen, ob der Prozess ausgeführt wird, und auf das Ergebnis zu reagieren

  4. Begrenzen Sie die Speichernutzung für einen einzelnen Linux-Prozess

  5. Linux :Sehen Sie sich die CPU-Auslastung durch einen Prozess für die letzte Sekunde an

So überprüfen Sie alle offenen Ports in Ihrem Linux-System

So finden Sie die PID und PPID eines Prozesses in Linux

Alle Möglichkeiten, um zu überprüfen, ob ein Port in Linux geöffnet ist

Die 10 besten Open-Source-Zwischenablage-Manager für Linux

Die 10 Open-Source-Dateinavigationstools für Linux-Systeme

Die 10 besten Open-Source-Renderer für Linux-Systeme