Tracking-threads Speicher-und CPU-Verbrauch
Schreibe ich eine Linux-Anwendung, die beobachtet andere Anwendungen und Spuren des Verbrauchs von Ressourcen . Ich Plane die Arbeit mit Java, aber die Programmiersprache ist nicht wichtig für mich. Das Ziel ist wichtig, so kann ich wechseln zu einer anderen Technologie oder Module zu benutzen. Meine Anwendung läuft jedes ausgewählte Drittanbieter-Anwendung wie Kind-Prozess. Meist untergeordnete-software löst einige algorithmen wie Diagramme, string-Suche, etc. Beobachter verfolgt Kindes-Ressourcen, während es der Auftrag wird beendet.
Wenn das Kind die Anwendung ist multi-threaded, vielleicht irgendwie möglich ist, zu verfolgen, wie viel Ressourcen verbraucht jeder thread? Anwendung können geschrieben werden, mit jedem nicht distributiv-Speicher threads Technologie: Java threads, Boost threads, POSIX threads, OpenMP, alle anderen.
- Haben Sie sah OProfile für inspiration? oprofile.sourceforge.net
- Nein, das ist mein master-Abschluss-Arbeit. Vielleicht ist mein Dozent sah: -), Aber OProfile sieht interessant aus. Thx.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In modernen Linux-systems (2.6), jeder thread verfügt über eine separate Kennung, die hat fast die gleiche Behandlung wie die pid. Es wird in der Prozess-Tabelle (zumindest in htop Programm) und es hat auch seine separate
/proc
Eintritt, d.h./proc/<tid>/stat
.Überprüfen
man 5 proc
und achten Sie insbesondere auf diestat
,statm
,status
etc. Sollten Sie die Informationen finden, die Sie interessiert sind in.Nur ein Hindernis ist, um diese zu erhalten thread Bezeichner. Es anders ist mit der Prozess-id! I. e.
getpid()
Anrufe in alle threads den gleichen Wert zurückgeben. Um das eigentliche thread-id, die Sie verwenden sollten (in einem C-Programm):Durch die Art und Weise, die java virtual machine (mindestens, seine Linux-Implementierung OpenJDK) ist, dass intern und verwendet Sie für debugging-Zwecke in den back-end -, aber nicht setzen es auf die java-Schnittstelle.
Speicher ist nicht zugeordnet-threads, und oft über mehrere threads. Dies macht es im Allgemeinen unmöglich und zumindest bedeutungslos zu reden, den Arbeitsspeicher-Verbrauch eines thread.
Beispiel könnte ein Programm mit 11 threads; 1 erstellen von Objekten und 10 mit den Gegenständen. Die meiste Arbeit ist getan auf die 10 threads, aber alle Speicher zugewiesen wurde, auf die ein thread erzeugt die Objekte. Nun, wie funktioniert ein Konto?
Wenn Sie bereit sind, zu verwenden Perl-werfen Sie einen Blick auf diese: Sys-Statistics-Linux
Habe ich es zusammen mit einigen der GD-Grafik-Pakete zu generieren, die system-Ressourcen-Nutzung-Diagramme für verschiedene Prozesse.
Einer Sache zu beachten - Sie werden wirklich brauchen, zu Lesen, auf /proc und verstehen jiffies - Letzte mal sah ich Sie nicht richtig dokumentiert in der man-Seiten, Sie müssen Lesen Sie die kernel-Quelle wahrscheinlich:
http://lxr.linux.no/#linux+v2.6.18/include/linux/jiffies.h
Denken Sie auch daran, dass bei Linux der einzige Unterschied zwischen thread und Prozess-ist, dass threads teilen Speicher - außer, dass Sie identisch sind, wie der kernel implementiert.