[Python-de] Speicherverbrauch messen

Martin v. Loewis martin at v.loewis.de
Mon May 13 08:35:53 EDT 2002


Gerhard Häring <haering_python at gmx.de> writes:

> Wo wir gerade beim Debuggen sind: ich möchte gerne verschiedene
> Python-Datenstrukturen bzgl. des Speicherverbrauchs
> vergleichen. Weil hier eine Python-Extension im Spiel ist, geht das
> nicht so einfach, man müsste wohl die komplette Objektstruktur
> durchgehen und mit dem sizeof()-Äquivalent aus mxTools die Größe der
> Objekte bestimmen und aufsummieren.

Kommt drauf an, welche Art von Aussage Du bekommen möchtest. Wenn Du
den gesamten Speicherbedarf für ein gewisses Datum ermitteln willst,
ist mxTools (oder jeder andere portable automatische Mechanismus) nur
eine recht ungenaue Näherung.

Diese Verfahren vergessen in der Regel:
- das die Malloc-Implementierung i.d.R. auch noch Overhead verursacht,
  oft 8 Bytes oder mehr pro Objekt
- das manche Python-Objekte in sich Zeiger auf weiteren Speicher tragen,
  und diesen nicht mitzählen,
- das hingegen auch Objekte geshared sein können (insbesondere Strings),
  und man deren Speicher nur ein Mal oder gar nicht zählen sollte.

> Also hab ich einfach an geeigneter Stelle ein raw_input reingetan,
> und viele von den betreffenden Objekten erzeugt, so dass auch der
> Unix-Befehl top zum Testen des Speicherverbrauchs verwendbar ist.

Das ist auch nicht gut geeignet: Das zählt den Speicher in Form von
Seiten; da kommen viele Rundungseffekte zum Zuge. Wenn Du da zu irgend
einem Ergebnis kommst, denke ich, man kann "durch Draufgucken" zum
gleichen Ergebnis kommen.

> Hat das schon jemand automatisiert oder könnte mir jemand sagen, wie
> man das am besten hinkriegt? Kann top vielleicht sogar byte-genau
> statt kb-genau ausgeben?

Ganz bestimmt nicht. Es ist, wie gesagt, nur Seiten-genau (4k) und
ignoriert auch das Problem, dass die Malloc-Implementierung viele
Seiten am Stück "auf Vorrat" alloziert (64k, glaube ich, in glibc 2.2).

Wozu benötigst Du eigentlich diese Informationen?

Ciao,
Martin



More information about the Python-de mailing list