Speicherbedarf eines Prozesses

Jan 'RedBully' Seiffert redbully at cc.hs-owl.de
Mon Apr 19 16:20:10 CEST 2010


Andre Landwehr schrieb:
> Am Montag, den 19.04.2010, 11:54 +0200 schrieb Sascha Effert:
>> ich habe in C++ eine shared library und ein Programm, welches dies
>> benutzt geschrieben. Ich würde jetzt gerne mit dem Speicherbedarf
>> experimentieren, speziell mit dem, was durch die shared lib verbraucht
>> wird. Momentan habe ich dazu das Programm gestartet und regelmäßig mit
>> ps -p $PID -o rss h
>> den genutzten Speicherbedarf abgefragt. Habe ich damit wirklich den
>> gesamten Speicher, den der Prozess benötigt? Ich muss gestehen, ich
>> blicke durch die verschiednen Parameter nicht durch.
> 
> Meiner Erfahrung nach ist es absolut nicht trivial, den
> Speicherverbrauch eines Prozesses mit Linux Bordmitteln herauszufinden.
> Shared libs wie z.B. die glibc fressen eine Menge Platz, werden aber von
> mehr als einem Prozess genutzt usw., da kann man auch schlicht keine
> Angaben zu machen. 

Man muss eben immer Shared und Private sowie File und Anon unterscheiden.

> Was du relativ einfach ermitteln kannst, ist wie viel Speicher du selbst
> allozierst. Dafür einfach global malloc/free bzw. new und delete
> überladen und mitzählen.

malloc/free ist einfach, new/delete ein PITA. Aber wen ich mich richtig erinnere
gibts da was von Ratiopharm. Malloc-debuger die man per LD_PRELOAD einbinden kann.

Hinweisen sollte man auch auf die glibc info-seite zu dynamischer
Speicherverwaltung, die obeyed ein paar Umgebungsvariablen und hat da ein paar
funktionen um Malloc stats rauszufingern. Nervig ist, das new/delete aus der
stdlibc++ kommt, also die Knoepfe nicht hat (oder andere?).

Natuerlich gibt es immer noch massiv, aus der Valgrind Suite.

> Ansonsten ist getrusage vermutlich schon die
> beste Lösung, oder halt in proc/[pid]/statm schauen, steht das gleiche
> drin (wobei du das pollen und händisch auswerten müsstest).
> 

/proc/smaps

http://github.com/dottedmag/mem-usage/raw/master/mem_usage

Oder einfach htop und da die ziffern bewundern...

Fuer den Maximal bedarf, das ist oft nicht sooo das problem, da durch heap
fragmentation der Bedarf nur steigt, selten sinkt (was hab ich gestaunt das nen
Serverprozess den ich geschrieben habe, es schafft im laufe von Stunden nach nem
surge nach oben auch wieder zu schrumpfen).

Er kann sich auch mit strace da reinhaengen und alles was nach sbrk und
mmap/munmap aussieht sich angucken. Vielleicht noch madvise(WONT_NEED) oder wie
das hiess.

[snip]
> 
> Gruß, Andre
> 

Gruss
	Jan

-- 
>> Wie, Ihr habt eure CBM 8032 und eure Zx81 nicht mehr?
> Ich glaub in meinem Taschenrechner ist ein Z80
In meiner Waschmaschine ist auch ein 68000er.
Trotzdem, auch mit Colorwaschmittel ists kein Amiga.
	-- ger.ct



More information about the Linux mailing list