Speicherbedarf eines Prozesses

Sascha Effert fermat at uni-paderborn.de
Mon Apr 26 09:20:41 CEST 2010


Am Freitag, den 23.04.2010, 17:47 +0200 schrieb Jan 'RedBully' Seiffert:
> Sascha Effert schrieb:
> > Hallo,
> > 
> [snip]
> > Theoretisch ich schalte auf der Maschine den swap komplett ab, wie
> > zuverlässig ist dann die Aussage von RSS? Selbst verständlich ist der
> > von mir verwendete Speicher darin immer noch auf page size Granularität,
> > aber das ist o.k., denn wenn ich Dich richtig verstehe, kann den
> > restlichen Speicher eh kein anderer Prozess erhalten. Also sollte mir
> > das doch weiter helfen, oder?
> > 
> 
> Die einfache Antwort:
> Ja

Super! :-)

> Die komplizierte Antwort:
> Kommt drauf an ob du das extrinsisch oder intrinsisch betrachten willst.

Mist... :-(

> Extrinsisch ist die RSS das was das Programm braucht, was die Maschine eben an
> RAM haben muss damit deine Chose laeuft. Punkt. (Naja, plus SHR, plus System
> overhead, etc.). Swap aus ist dabei vernuenftig, den swap heist meist -> tot.
> Das Programm alloziert den Speicher ja nicht zum Spass.
> 
> Intrinsisch, aus Sicht des Programms kann es gut sein das in dieser Nummer eine
> Menge overhead steckt, das Programm eigentlich grade garnicht soviel Speicher
> braucht, er halt in den ganzen Abstraktionsebenen festheangt.
> Wenn man dann man dem nachgeht wo der overhead herkommt, kann man vielleicht mit
> ein paar kleinen aenderungen die RSS "ordentlich" senken.
> 
> Ein Beispiel um zu verdeutlichen was ich meine:
> Der Stack eines Programms (oder threads) ist erstmal ein mmap von Anon speicher,
> dahinter die sogenannte guard page. Wenn dein Programm jetzt mehr stack braucht,
> laeuft es in die guard page, der stack waechst nach unten. Mehr Speicherseiten
> werden Stueck fuer Stueck in den Stack gefaultet. Das ist soweit erstmal alles fit.
> Wo man sich jetzt ins Knie schiessen kann: Beim Programmstart brauchst du aus
> irgendeinem Grund viel Stack (Grosse Config/Cache Datei wird in Puffer auf Stack
> geladen, irgendein rekursiver Algo bereitet den run vor), Dein Stack waechst aus
> diesem "once-off" Grund auf enorme Groessen (Sagen wir 2 MB), der restliche Lauf
> des Programms braucht den Stack aber nicht mehr so gross (oft irgendwas im
> Bereich < 64k), denoch hast du den Speicher "ge-captured".

Also, zunächst: Hast Du gerade 2 MB als enorme Speichermenge bezeichnet?
Im Moment liegt mein Prozess bei fröhlich 62 GB RSS, 64 GB Virt (hab den
Swap noch laufen). 

Ich habe das Programm so aufgebaut, dass es immer recht große Blöcke an
Speicher sind, die gleichzeit allokiert/deallokiert werden. Daher dürfte
ich zumindest mit dem Verschnitt des pages keinen größeren Probleme
haben.

Ach ja, für alle denen noch klar war, wie schlimm XML mit DOM ist: Wenn
ich mit der libxerces-c eine 4 GB XML Datei als DOM lade, dann braucht
das ca. 40 GB RAM... (Ich war jung und hatte den Speicher...) Vielleicht
werfe ich den XML-Kram noch raus und ersetze ihn durch irgendwas
sinnvolles.

Nur um sicher zu gehen: sehe ich es richtig, dass ich den SWAP wirklich
abstellen muss, damit der Prozess ihn nicht verwendet? Oder gibt es
irgendeine Möglichkeit dem Betriebssystem zu sagen, dass bestimmter
Speicher (oder Speicher von bestimmten Prozessen) nicht geswapt werden
darf?

tschau

Sascha




More information about the Linux mailing list