Toon posts:

Geheugengebruik Linux 2.4 vs. 2.6

Pagina: 1
Acties:
  • 162 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
In mijn vrije tijd hobby ik wat aan een server daemon. Nu heb ik onlangs mijn server van Debian 3.1 ge-upgrade naar 4.0 (dus van een 2.4 kernel naar een 2.6 kernel) en nu merk ik dat mijn daemon in plaats van een paar MB gegroeid is naar 10 a 20 MB in geheugen gebruik. Op een 2.4 nam m'n daemon 3.5 MB in gebruik, groeide uiteraard bij client connecties, maar kwam weer op z'n oorspronkelijke geheugengebruik uit als alle verbindingen gesloten werden. Onder 2.6 niet. De daemon wordt met gemak 20 MB (zoveel malloc ik echt niet) en blijft dat ook gebruiken als alle verbindingen gesloten worden. Ben al met valgrind aan de slag, maar alles ziet er goed uit in. Ook applicaties zoals MySQL zijn groter. Onder 2.4 ongeveern 80MB, onder 2.6 120MB.

Doe ik iets verkeerd? Kan ik hier wat via instellingen aan doen? Iemand die me kan uitleggen wat hier aan de hand is of me wat zoektermen geven, want via Google kan ik geen antwoord vinden hierop.

  • smesjz
  • Registratie: Juli 2002
  • Niet online
Verwijderd schreef op dinsdag 12 juni 2007 @ 12:56:
In mijn vrije tijd hobby ik wat aan een server daemon. Nu heb ik onlangs mijn server van Debian 3.1 ge-upgrade naar 4.0 (dus van een 2.4 kernel naar een 2.6 kernel) en nu merk ik dat mijn daemon in plaats van een paar MB gegroeid is naar 10 a 20 MB in geheugen gebruik. Op een 2.4 nam m'n daemon 3.5 MB in gebruik, groeide uiteraard bij client connecties, maar kwam weer op z'n oorspronkelijke geheugengebruik uit als alle verbindingen gesloten werden. Onder 2.6 niet. De daemon wordt met gemak 20 MB (zoveel malloc ik echt niet) en blijft dat ook gebruiken als alle verbindingen gesloten worden. Ben al met valgrind aan de slag, maar alles ziet er goed uit in. Ook applicaties zoals MySQL zijn groter. Onder 2.4 ongeveern 80MB, onder 2.6 120MB.

Doe ik iets verkeerd? Kan ik hier wat via instellingen aan doen? Iemand die me kan uitleggen wat hier aan de hand is of me wat zoektermen geven, want via Google kan ik geen antwoord vinden hierop.
Dit is niet verkeerd. Je kan eens pmap draaien op je server als ie loopt. Dan zie je welke shared libs jouw proces gebruikt. Welke GCC versie gebruik je?

  • deepbass909
  • Registratie: April 2001
  • Laatst online: 23:35

deepbass909

[☼☼] [:::][:::] [☼☼]

Volgens mij alloceert de 2.6 kernel het geheugen ook anders dan de 2.4. Het houdt meer rekening met wat er gevraagd kan worden, ipv wat er direct nodig is. Hierdoor kan een app wellicht meer geheugen opslokken dan het voorheen deed, maar werkt het tegelijkertijd ook sneller.

Waarschuwing, opperprutser aan het werk... en als je een opmerking van mij niet snapt, klik dan hier


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

deepbass909 schreef op woensdag 13 juni 2007 @ 13:33:
Volgens mij alloceert de 2.6 kernel het geheugen ook anders dan de 2.4. Het houdt meer rekening met wat er gevraagd kan worden, ipv wat er direct nodig is. Hierdoor kan een app wellicht meer geheugen opslokken dan het voorheen deed, maar werkt het tegelijkertijd ook sneller.
Mwah, het gebruikt het geheugen nog niet echt. Als je alles bij elkaar optelt wat in Top staat, kom je op een getal had dat je liever in je PC had zitten, dan dat er werkelijk in zit.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 01-02 13:45

deadinspace

The what goes where now?

Waarmee bekijk je het geheugengebruik van die programma's? Copy/paste de relevante uitvoer van die programma's eens hierheen, alsjeblieft.

Weet je verder zeker dat het alleen door de kernel upgrade veroorzaakt wordt? Aangezien je een heel Debian systeem geupgrade hebt zijn er natuurlijk meer onderdelen vervangen (niet in de laatste plaats libc en de programma's zoals MySQL zelf). Heb je de oude kernel nog? Zo ja, zijn de getallen dan weer zoals je ze verwacht als je die boot?

Verwijderd

Topicstarter
@deepbass909: ik gebruik de GCC versies zoals die bij Sarge (3.3.5) en Etch (4.1.2) worden meegeleverd.

@deadinspace: ik gebruik daar 'ps' voor (de VSZ kolom). Ik heb ergens ook nog een Etch bak met een 2.4 kernel. Deze geeft het oude (lage) geheugengebruik aan. Het is dus echt een kernel 2.4/2.6 issue.

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

Wat leuke info over vsz :)

http://virtualthreads.blo...emory-usage-on-linux.html
http://gentoo-wiki.com/FAQ_Linux_Memory_Management
VIRT stands for the virtual size of a process, which is the sum of memory it is actually using, memory it has mapped into itself (for instance the video card's RAM for the X server), files on disk that have been mapped into it (most notably shared libraries), and memory shared with other processes. VIRT represents how much memory the program is able to access at the present moment.
^^ Slaat wel op "top", maar volgens mij scheelt ps niet veel.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 01-02 13:45

deadinspace

The what goes where now?

Inderdaad, en om die reden is VSZ tamelijk "enthousiast" qua hoeveelheid gebruikt geheugen, en kijk ik daar zelf eigenlijk maar zelden naar.

RSS is vaak een stuk nuttiger, dat is (voorzover ik weet) het daadwerkelijk residente geheugen, dus het aantal KB dat daadwerkelijk voor dat process in je RAM aanwezig is. Hierin wordt geheugen van dat proces dat uitgeswapt is trouwens niet meegeteld (is niet resident aanwezig), wat zowel handig als onhandig kan zijn. Overigens zitten aan RSS ook nog andere haken en ogen, ik weet bijvoorbeeld niet hoe geheugen dat twee processen delen geteld wordt.

Om te kijken wat je processen zoal aan mapped memory hebben, kun je in /proc/PID/maps kijken (waarbij je PID uiteraard vervangt door het PID van het proces in kwestie). Misschien dat je de output daarvan op een 2.6 en een 2.4 kernel kunt vergelijken voor meer duidelijkheid. Het is goed mogelijk dat 2.6 VSZ gewoon anders berekent, waardoor VSZ onder 2.6 kernels groter uitvalt.

Om de grootte van elk segment in /proc/PID/maps te berekenen (staat er standaard niet bij) heb ik het volgende scriptje in elkaar geflanst:
(TOTAL=0; while read LINE; do S=$(echo "${LINE}" | cut -d - -f 1); E=$(echo "$LINE" | cut -d ' ' -f 1 | cut -d - -f 2); SIZE=$((0x${E}-0x${S})); printf "%8i " ${SIZE}; echo ${LINE}; TOTAL=$((TOTAL+SIZE)); done; echo "Total mapped memory: $((TOTAL/1024)) KB") < /proc/PID/maps

Ik heb geen idee of de layout van /proc/PID/maps op 2.4 kernels hetzelfde is (of dat die uberhaupt bestaat op 2.4 kernels), dus of deze oneliner ook werkt voor 2.4 kernels mag je zelf uitproberen. Veel plezier ermee :P

Verwijderd

Topicstarter
Oke. Bedankt voor jullie reacties. Ik ben weer gerust gesteld. Ben blij om te horen dat ik in ieder geval geen wijzigingen aan m'n daemon hoef te maken om fatsoenlijk onder 2.6 te kunnen draaien (leek me al het geval, maar toch voor de zekerheid even gecontroleerd).

  • deepbass909
  • Registratie: April 2001
  • Laatst online: 23:35

deepbass909

[☼☼] [:::][:::] [☼☼]

GX schreef op woensdag 13 juni 2007 @ 17:23:
[...]

Mwah, het gebruikt het geheugen nog niet echt. Als je alles bij elkaar optelt wat in Top staat, kom je op een getal had dat je liever in je PC had zitten, dan dat er werkelijk in zit.
Top geeft een alles behalve realistisch beeld van je geheugen gebruik. Het geeft je hooguit een idee welk programma veel resources nodig heeft.

Waarschuwing, opperprutser aan het werk... en als je een opmerking van mij niet snapt, klik dan hier


Verwijderd

Waarschijnlijk zit nu er naast een nieuwe kernel ook een nieuwe c-library met een andere malloc-impementatie op je systeem. Het is de malloc-implementatie die bepaalt hoe er binnen user processen met dynamisch geheugen wordt omgegaan.
Pagina: 1