Wieviel RAM braucht ein Prozess?

debian user german

Alexander
Hallo.

Ja, die Frage mag "etwas" peinlich sein, aber…

Also, wenn man sich top anschaut, so sieht man 4 Angaben zum benutzen
Speicher. Von meinem System hier http://nopaste.me/paste/4d8c56884646f :

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+   PPID SWAP COMMAND

1.3g nm-applet


Da gäbe es also VIRT, RES, SHR und SWAP

Nun verwundert mich, wie gross "nm-applet" (Network Manager) ist. 1.3GB
Swap? Kann das wirklich stimmen?

Und wie stelle ich fest, wieviel RAM die Prozesse jetzt gerade beanspruchen?
Wäre das die Spalte RES?

Danke,

Alexander
                                            
Christoph
Hi Alexander,

man top ergibt untenstehendes, wobei "VIRT = SWAP + RES" offensichtlich
falsch ist, sowohl nach der Elärung wie bei auch deiner Ausgabe.

VIRT = SWAP + RES + SHR

Dein Prozess belegt sicher RES, sowie verwendet auch SHR, wobei SHR evt.
von mehr als nur deinem Prozess verwendet wird (dynamische
Linklibraries).

Freundliche Grüße,
Christoph

o: VIRT  --  Virtual Image (kb)
   The  total  amount  of  virtual memory used by the task.  It includes all code,
   data and shared libraries plus pages that have been swapped out.

   VIRT = SWAP + RES.

[...]

p: SWAP  --  Swapped size (kb)
   The swapped out portion of a task's total virtual memory image.


q: RES  --  Resident size (kb)
   The non-swapped physical memory a task has used.


t: SHR  --  Shared Mem size (kb)
   The amount of shared memory used by a task.  It  simply  reflects  memory  that
   could be potentially shared with other processes.
                                            
Alexander
Hi!


Wobei ich das nicht so ganz verstehe (auch nicht nach Lektüre
von Kris' Artikel…).

Ich hatte Chrome laufen. Das forkt ja auch ganz mächtig.
Wenn ich nun all die RES Werte addiert habe, so kam ich
auf ~500 MB.

Laut top waren insg. ~1.9 GB RAM belegt. Habe Chrome
beendet. Dann waren ~1.7 GB RAM belegt, dh. es wurden
~200 MB freigegeben - aber, wie gesagt, die Summe aller
RES Werte ergab ~500 MB.

Alexander
                                            
Christoph
Hi Alexander,


Evt. werden beim forken nur DATA und BSS neu angelegt, nicht aber der
CODE, was IMHO auch unnötig ist. Ich weiss es nicht, und habe gerade
keine Zeit, das Thema weiter zu verfolgen. Über erhellende Erkenntnisse
freue ich mich aber.

Freundliche Grüße,
Christoph
                                            
Harald
Hallo,



Beim Forken wird zunächst mal (fast) gar kein weiterer physischer Speicher
verbraucht. Der virtuelle Prozessraum wird neu erzeugt, verweist aber
zunächst auf die bestehenden physischen Speicherseiten.

Erst wenn einer der beiden Prozesse den Speicherinhalt ändert, wird eine
Kopie angelegt (Copy on Write, CoW).  Mit der Zeit laufen also die Prozesse
immer stärker auseinander; wobei reine Code Segmente normalerweise nicht
geändert werden und daher auch nie eine Kopie angelegt werden muss.

Was in dem Artikel noch fehlt: Linux hat ab Kernel 2.6.32 das Kernel
Samepage Merging eingeführt (wird manchmal auch als Memory Deduplication
bezeichnet).  Dabei erkennt Linux im Hintergrund, wenn Speicherseiten den
gleichen Inhalt haben, und mappt diese dann auf die gleiche physische Seite. 
Es handelt sich auch hier im CoW, d.h.  sobald ein Prozess die Seite ändert,
wird sie wieder separiert.  Damit lässt sich vor allem bei
Virtualisierungsservern Speicher sparen, wenn mehrfach das gleiche
Gastbetriebssystem läuft.

Shared Memory (SHM) ist Speicher, auf den mehrere Prozesse zugreifen können.
Im Unterschied zu CoW sind Änderungen, die ein Prozess macht, für die anderen
Prozesse sichtbar; es wird also keine Kopie erzeugt.

Für beides (CoW und SHM) gilt aber: wenn einer der beteiligten Prozesse
beendet wird, wird dieser Speicher dadurch nicht frei; sondern erst, wenn
der letzte Prozess terminiert.

Gruß, Harald
                                            
Sven
Das KSM muss man aber separat einschalten, da es natürlich einen
Overhead hat und für reine Desktop- und normale Server-Systeme keinen
Vorteil bringt.

Wirklich sinnig ist es nur, wenn man KVM benutzt.

S°
                                            
Enrico
Oder Container.


cu
                                            
Alexander
Guten Morgen!



Was heisst das nun für mich? Kann ich irgendwie mit vertretbarem
Aufwand herausfinden, wieviel RAM ein Programm nun wirklich
belegt? Vor allem auch so "komplizierte" Programme wie Chrome
oder Apache?

Alexander
                                            
Martin
Am Saturday 26 March 2011 schrieb Martin Steigerwald:

Immer mit Neustart, sofern es keine andere Möglichkeit ist, in den 
Speicher geladene Bibliotheken wieder loszuwerden.

Weiß nicht, wie gut

echo 1 > /proc/sys/vm/drop_caches

da greift.