Ich habe einen schönen Monitor gefunden , mit dem ich eine Vielzahl von Laufzeitdaten eines einzelnen Prozesses protokollieren kann. Ich bin auf der Suche nach einem Äquivalent, das das gleiche für die Bandbreitennutzung tut. Im Idealfall sollte der Befehl so aussehen bwmon --pid 1 --log init.log
. Gibt es so etwas? Kann es ohne Administratorrechte ausgeführt werden?
monitoring
bandwidth
Tshepang
quelle
quelle
Antworten:
Etwas, das Ihnen den Einstieg erleichtert (nur für den Fall, dass Sie es selbst schreiben möchten):
Bemerkungen:
stat --printf="%N\n" /proc/PID/exe | cut -d ' ' -f 3
quelle
nc
Paar über localhost ausgeführt, ein Byte pro Sekunde gesendet und zugesehen/proc/<listening-nc-pid>/net/dev
. Dann lief ich ein zweitesnc
Paar und sendete mit maximaler Geschwindigkeit. Die Datei, die ich gerade betrachtete, zählte ganz offensichtlich die Daten des zweiten Paares zusammen mit den Daten des ersten Paares. Laufen unter Linux 2.6.32.function strftime never defined
. Es wurde durch die Installation von Gawk behoben ./proc/<pid>/net/dev
und/proc/net/dev
habe hier den gleichen Inhalt. Daher meldet der Scipt den Datenverkehr nur für eth0, nicht für den angegebenen Prozess.eth0
, wie aus dem Prozess ersichtlich. Es ist nicht Zähldaten durch den Prozess durch diese Schnittstelle gesendet.Wenn Sie mit der verwendeten allgemeinen E / A-Bandbreite zufrieden sind (oder wenn Ihr Programm fast ausschließlich Netzwerk-E / A ausführt), können Sie sich die
/proc/<pid>/io
Datei ansehen . Sie möchten die Felderrchar
undwchar
. Vielleicht möchten Sie subtrahierenread_bytes
undwrite_bytes
, da sie repräsentieren liest und schreibt in der Speicherschicht. Siehe Abschnitt 3.3 von http://www.kernel.org/doc/Documentation/filesystems/proc.txt .Wenn Sie mehr Auflösung benötigen ... könnten Sie dies vielleicht mit
lsof
und skriptenstrace
, obwohl es schmerzhaft wäre, alle Eckfälle richtig zu machen. Die Grundidee ist die Ausgabe zu analysierenstrace -p <pid>
, packte den ersten Parameter (= den Dateideskriptor) und den Rückgabewert (= Anzahl der Bytes) ausread()
,write()
,send()
undrecv()
Anrufe ( Hinweis gibt es mehrere weitere syscalls zu hören, ich haven‘ t sie alle aufspüren). Negative Werte verwerfen; Sie weisen auf Fehler hin. Verwenden Sielsof -p <pid>
diese Option, um herauszufinden, welche Dateideskriptoren TCP / UDP-Sockets sind, und addieren Sie die Anzahl pro fd. Diese Strategie erfordert keine Wurzel, solange Sie den Prozess besitzen, den Sie untersuchen, aber es wäre wirklich haarig zu schreiben, geschweige denn gut zu schreiben.quelle
versuche Nethogs :
quelle