Tag allerseits, kennt jemand ein Tool, dass den Speicherverbrauch von Programmen/Prozessen überprüft? Da ich von einem Programm gehört habe, dass es verschiedene "memory leaks" hat, würde ich gerne regelmässig den Speicherverbrauch prüfen. (Ich meine jedoch nicht so etwas wie valgrind.) Führt der Kernel Buch über den Speicherbedarf? Gruss, Oliver Block -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Oliver, On Wednesday 25 June 2008 11:42:10 Oliver Block wrote:
kennt jemand ein Tool, dass den Speicherverbrauch von Programmen/Prozessen überprüft?
Da waren (mit steigender Qualitaet der Aussage des Tools steigt auch dessen Komplextitaet): - top - ps - valgrind u.v.A. Roman -- Roman Fietze Telemotive AG Büro Mühlhausen -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Roman Fietze schrieb:
Da waren (mit steigender Qualitaet der Aussage des Tools steigt auch dessen Komplextitaet):
- top - ps
An die beiden hatte ich auch gedacht. Mal sehen, was sich darauf machen lässt. Gruss, Oliver -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Wed 25 Jun 2008, Oliver Block wrote:
kennt jemand ein Tool, dass den Speicherverbrauch von Programmen/Prozessen überprüft?
Wenn Du ein /proc Verzeichnis und einen Kernel >=2.6.14 (oder so ähnlich) hast, gibt /proc/$PID/smaps relativ genau Auskunft über den Speicher. Näheres findest Du in der Doku zum /proc Filesystem oder bei Google. Bei neueren Kernels (keine Ahnung ab welcher Version) gibt es dort auch ein Feld "Referenced", das vielleicht in Deinem Fall recht interessant sein kann. Es arbeitet in Kombination mit /proc/$PID/clear_refs. Näheres siehe oben. Falls Du Perl magst, gibt es ein Modul Linux::Smaps. Ein Punkt sei noch erwähnt. Ist eine Speicherseite ausgelagert (im Swapspace), kannst Du auch über die smaps-Datei nicht herausfinden, wie viele Prozesse diese Seite benutzen. Sie taucht demzufolge nicht in Shared_* und auch nicht in Private_* auf, siehe http://search.cpan.org/~opi/Linux-Smaps-0.06/lib/Linux/Smaps.pm#A_special_no... Torsten -- Need professional mod_perl support? Just hire me: torsten.foertsch@gmx.net -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Torsten Foertsch schrieb:
Wenn Du ein /proc Verzeichnis und einen Kernel >=2.6.14 (oder so ähnlich) hast, gibt /proc/$PID/smaps relativ genau Auskunft über den Speicher. Näheres findest Du in der Doku zum /proc Filesystem oder bei Google.
Bei mir ist das /proc/$PID/maps und das sieht auf den ersten Blick wirklich vielversprechend aus. Die Doku dazu dürfte man 5 proc sein. Jetzt muss ich mir erst mal einen Überblich verschaffen, wie ich die umfangreichen Informationen auswerten kann. Da steht ja wirklich eine Fülle zur Verfügung. Gruss, Oliver -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Wed 25 Jun 2008, Oliver Block wrote:
Bei mir ist das /proc/$PID/maps und das sieht auf den ersten Blick wirklich vielversprechend aus.
Kommt darauf an, was Du willst. smaps ist *wesentlich* aussagekräftiger. Hier ein kleiner Ausschnitt aus "cat /proc/self/smaps", also dem, was "cat" über sich selbst erzählt: 7f5d44ca9000-7f5d44df8000 r-xp 00000000 08:09 121449 /lib64/libc-2.8.so Size: 1340 kB Rss: 360 kB Pss: 4 kB Shared_Clean: 360 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 360 kB Die erste Zeile findest Du so auch in "maps". Sie sagt Dir aber nur was über die theoretische Größe (0x7f5d44df8000 - 0x7f5d44ca9000 = 0x14F000 = 1372160 = 1340 kB) des Segments, aber nichts über den tatsächlichen Speicherverbrauch. Von diesen 1340 kB sind nämlich nur 360 kB (Rss) im Speicher auch vorhanden. Der Rest wurde entweder noch nicht vom Prozess angefordert, ist also nur in der ausführbaren Datei auf der Platte vorhanden, oder wurde ausgelagert und ist nur im Swapspace vorhanden. Die Seiten, die mit Shared_* beginnen, werden von mehreren Prozessen gleichtzeitig benutzt. Das ist entweder shared memory, oder wie hier das read-only Segment von irgendeiner Lib. Nur der Private_* markierte Teil des Segments gehört wirklich ausschließlich zu dem Prozess. Pss ist eine recht interessante Zahl. Es ist die Summe der Quotienten aus der Seitengröße und der Anzahl ihrer Benutzer, d.h. der Prozesse, die diese Seite benutzen. Addierst Du alle Pss zusammen, so erhältst Du eine Maß für den Anteil an Hauptspeicher, den dieser Prozess im Augenblick verbraucht. Eine Seite ist "dirty", wenn ihre Kopie im Hauptspeicher seit dem letzten Schreiben auf die Platte (sync) geändert wurde. Das Stück Speicher im Beispiel ist ein read-only Code-Segment aus der libc. Es ist von Anfang an read-only gemappt. Daher kann es keine "dirty" Seiten geben. "clean" ist das Gegenteil von "dirty". Willst Du Änderungen im Working Set eines Prozesses abschätzen, hilft "Referenced". Diese Zähler werden durch Schreiben in /proc/$PID/clear_refs gelöscht. Von da an wird Referenced jedesmal erhöht, wenn der Prozess eine neue Seite braucht. Ein "gutartiger" langlebiger Prozess sollte nach einer Einschwingphase keine neuen Seiten mehr brauchen. Im Beispiel wurde nie nach "clear_refs" geschrieben. Daher stimmt die Zahl mit "Rss" überein. Welchen Kernel benutzt Du? Falls es noch ein 2.4er ist, ist vielleicht /proc/$PID/statm aussagekräftiger. Was die einzelnen Zahlen bedeuten, ist mir aber inzwischen entfallen. Wenn Du aber einen 2.6er ohne smaps hast, kannst Du nicht wirklich Messungen zum Hauptspeicherverbrauch der einzelnen Prozesse vornehmen, außer Dich interessiert nur die Gesamtgröße (Size). Schaff Dir also einen aktuellen Kernel an, wirklich! Torsten -- Need professional mod_perl support? Just hire me: torsten.foertsch@gmx.net -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mit, 25 Jun 2008, Oliver Block schrieb:
Torsten Foertsch schrieb:
Wenn Du ein /proc Verzeichnis und einen Kernel >=2.6.14 (oder so ähnlich) hast, gibt /proc/$PID/smaps relativ genau Auskunft über den Speicher. Näheres findest Du in der Doku zum /proc Filesystem oder bei Google.
Bei mir ist das /proc/$PID/maps und das sieht auf den ersten Blick wirklich vielversprechend aus. Die Doku dazu dürfte man 5 proc sein.
Auch. Im Zweifelsfall aber: /usr/src/linux/Documentation/filesystems/proc.txt -dnh -- The sigmonster ate my sig and all I got was this stupid tagline. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Oliver Block wrote:
Tag allerseits,
kennt jemand ein Tool, dass den Speicherverbrauch von Programmen/Prozessen überprüft? Da ich von einem Programm gehört habe, dass es verschiedene "memory leaks" hat, würde ich gerne regelmässig den Speicherverbrauch prüfen. (Ich meine jedoch nicht so etwas wie valgrind.) Führt der Kernel Buch über den Speicherbedarf?
Schau dir mal pmap an. -- Sandy Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Wed 25 Jun 2008, Sandy Drobic wrote:
Schau dir mal pmap an.
Das ist nur ein Frontend zu smaps. Torsten -- Need professional mod_perl support? Just hire me: torsten.foertsch@gmx.net -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (5)
-
David Haller
-
Oliver Block
-
Roman Fietze
-
Sandy Drobic
-
Torsten Foertsch