Toon posts:

Vreemd memory gebruik in Redhat

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een workstation, draaiend op Redhat 9.0 (kernel 2.4.20-8), met 2Gb geheugen die door mezelf wordt gebruikt als desktop en daarnaast ook een soort intranet applicatie, bestaande uit de combinatie Apache - Mysql - PHP - Perl, draait. Nu gebeuren er vreemde dingen met het geheugen gebruik. Na enige tijd lijkt het geheugen vol te lopen; momenteel is er nog meer 150 mb geheugen vrij (volgens top); wanneer ik een ps -aux doe kan ik dat geheugen gebruik niet terug vinden. Er zijn nauwelijks processen die meer dan 0.1% van het geheugen gebruiken. Iemand tips hoe ik kan achterhalen waardoor dat geheugengebruik zo hoog is?

Een tweede probleem waarop ik het antwoord of de oplossing ook wel graag zou weten is dat de intranetapplicatie soms httpd processen start maar niet afsluit. Er wordt dan een proces gestart en ik vermoedt dat gebruikers dan vervolgens op de stopknop van hun browser duwen, of de browser helemaal sluiten. Hierdoor blijft het proces bestaan en vervelender, het geheugengebruik wat op kan lopen tot 50% van het totaal. Ik moet dus een keer per week controleren of dit soort ghost processen niet bestaan en zowel, ze met de hand killen. Nu kan ik hier wel een cronjob van maken maar die oplossing verdient ook geen schoonheidsprijs. Iemand suggesties?

Voor de volledigheid, ik heb geprobeerd mijn huiswerk te doen maar kon nergens een oplossing vinden.

  • Gotiniens
  • Registratie: November 2002
  • Laatst online: 12:17

Gotiniens

Fairly odd Tim

linux stopt alles in het geheugen, en het blijft daar gewoon inzitten tot je je PC uitzet, of het plaats moet maken voor iets belangrijkers. Waarschijnlijk is er dus niks aan de hand en maak je je druk om niks ;)

  • Blaasvis
  • Registratie: November 2001
  • Laatst online: 06:29

Blaasvis

Cidora \o/

kijk eens met free, het meeste van je geheugen wordt gebruikt als cache ;)
ik meende dat dit ook in FAQ stond!

Freedom is everything you need ; <moto-moi|afk> ik verkloot het gewoon nooit :P


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Verwijderd schreef op 23 augustus 2004 @ 11:54:
[knip]vol gelopen geheugen[knip]
Wat geeft 'free -m', en je hebt deze FAQ gelezen?
edit:
spuit 11 dus :P

[ Voor 8% gewijzigd door _Squatt_ op 23-08-2004 11:58 ]

"He took a duck in the face at two hundred and fifty knots."


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 17-02 15:48

chem

Reist de wereld rond

http processen blijven ook gewoon draaien, dat zijn zogeheten child-processen die de requests afhandelen.

Die nemen 0% cpu-tijd in, en je merkt er dus ook niets van :)

Klaar voor een nieuwe uitdaging.


  • Wilke
  • Registratie: December 2000
  • Laatst online: 11:47
Waarom zit in Linux altijd mijn geheugen (bijna) vol? al gelezen?

Dat van die childprocessen kan zoals chem al zegt best kloppen. Hoe bedoel je dat ze 50% van het geheugen gebruiken? Dat zou in jouw geval een gigabyte betekenen, en ik geloof nooit dat 1 apache-proces zoveel geheugen kan gebruiken. Dus hoe meet je dat, en weet je zeker dat het een probleem is?

M.a.w. als je weer zo'n proces tegenkomt, post dan eens de uitvoer van 'top' (waar dat proces bij staat, uiteraard) en 'free' enzo.

Verwijderd

Topicstarter
Ok, ik heb de FAQ gelezen. Heeft me helaas weinig geholpen, hoewel free -m weer een nieuwe kijk op het geheugengebruik geeft.

Dit is de free -m output:
code:
1
2
3
4
            total       used       free     shared    buffers     cached
Mem:          2016       2004         11          0        105       1274
-/+ buffers/cache:        624       1391
Swap:         2055         46       2008


Hier een proces wat blijft bestaan (inclusief geheugengebruik) na het stoppen van het proces in de browser (output van ps -aux|grep httpd):
code:
1
nobody   32307  0.1 47.2 984120 976216 ?     S    Aug19   7:11 [httpd]


Dit proces staat uiteraard niet in top want het gebruik nauwelijks cpu-tijd. Alleen veel geheugen. En dat merk je natuurlijk wel ;)

Dat 1 proces zoveel geheugen gebruikt verbaast gezien de aard van de opdracht niet (6,5 miljoen getallen ophalen uit een database en die onder andere log-transformeren).

Wat me dus is opgevallen in de eerste weken dat het systeem was opgestart, het default geheugengebruik rond de 1Gb schommelde maar dat dit nu (na mijn vakantie, uptime inmiddels tien weken) rond de 2Gb schommelt; ik kan geen proces vinden wat daadwerkelijk zoveel geheugen gebruikt. Dit betekent dat er of een of ander ondetecteerbaar ghost-proces geheugen in beslag neemt, of dat de hoeveelheid gebruikt geheugen per proces in top en free niet juist wordt weergegeven. Nieuwe processen starten resulteert overigens in swappen, dus de totale hoeveelheid geheugen dat in gebruik is klopt wel degelijk.

[ Voor 1% gewijzigd door Kees op 24-08-2004 12:23 ]


  • Wilke
  • Registratie: December 2000
  • Laatst online: 11:47
Als je in 'top' even M indrukt sorteert hij op geheugengebruik.

Maar ok, de uitvoer van ps geeft inderdaad wel aan dat het proces 1 GB geheugen gebruikt, dat kan niet de bedoeling zijn. Wat voor intranet app is het, en waar maakt het gebruik van? PHP? Servlets? Er zitten waarschijnlijk wat memory leaks in zo te zien.

Makkelijker dan die leaks op te lossen is waarschijnlijk om Apache zo in te stellen dat hij de threads/processen sneller dood maakt, door het maximum aantal requests dat ze afhandelen te verkleinen tot bv. 10 of 20 ofzo (standaard staat dat dacht ik op oneindig).

Check de Apache documentatie of een standaard config-file maar eens, daar is wel te vinden hoe dat moet, ik weet het zo niet uit m'n hoofd.

Laat iig even weten wat je probeert en of het helpt :)

Edit: om te helpen bij het zoeken: de optie heet 'MaxRequestsPerChild'.

[ Voor 5% gewijzigd door Wilke op 23-08-2004 13:17 ]


Verwijderd

Wilke schreef op 23 augustus 2004 @ 13:15:
Wat voor intranet app is het, en waar maakt het gebruik van? PHP? Servlets? Er zitten waarschijnlijk wat memory leaks in zo te zien.
PHP en servlets (java) zijn managed environments, die hebben geen memleaks.

Verwijderd

Topicstarter
Wilke schreef op 23 augustus 2004 @ 13:15:
Maar ok, de uitvoer van ps geeft inderdaad wel aan dat het proces 1 GB geheugen gebruikt, dat kan niet de bedoeling zijn. Wat voor intranet app is het, en waar maakt het gebruik van? PHP? Servlets? Er zitten waarschijnlijk wat memory leaks in zo te zien.
Dat is wel degelijk de bedoeling, zoals ik al zei haalt die app 6,5 miljoen records op en doet daar bewerkingen op, waardoor de 6,5 miljoen records bijvoorbeeld twee keer in een array moet staan. En op zich is daar ook wel het geheugen voor.
Makkelijker dan die leaks op te lossen is waarschijnlijk om Apache zo in te stellen dat hij de threads/processen sneller dood maakt, door het maximum aantal requests dat ze afhandelen te verkleinen tot bv. 10 of 20 ofzo (standaard staat dat dacht ik op oneindig).

Check de Apache documentatie of een standaard config-file maar eens, daar is wel te vinden hoe dat moet, ik weet het zo niet uit m'n hoofd.

Laat iig even weten wat je probeert en of het helpt :)

Edit: om te helpen bij het zoeken: de optie heet 'MaxRequestsPerChild'.
Ik heb dat op 30 gezet maar het mag helaas niet baten. Er worden ook niet heel veel nieuwe processen gestart, er is gewoon 1 proces wat veel ruimte gebruikt. Waar ik naar op zoek ben geweest (maar niet heb kunnen vinden) is een soort MaxExecutionTime van een proces, zodat processen niet eeuwig veel geheugen kunnen blijven vasthouden (hoewel ik me realiseer dat dat een probleem door de manier waarop Apache werkt - continu meerdere processen voor het verwerken van requests).

  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 21:27
Verwijderd schreef op 24 augustus 2004 @ 11:30:
[...]


Dat is wel degelijk de bedoeling, zoals ik al zei haalt die app 6,5 miljoen records op en doet daar bewerkingen op, waardoor de 6,5 miljoen records bijvoorbeeld twee keer in een array moet staan. En op zich is daar ook wel het geheugen voor.
Dus? Dan klopt het geheugengebruik toch?

Verwijderd

Topicstarter
TukkerTweaker schreef op 24 augustus 2004 @ 15:17:
[...]


Dus? Dan klopt het geheugengebruik toch?
Misschien ben ik niet duidelijk geweest. Het probleem is dat op het moment dat een gebruiker zijn browser afsluit terwijl de applicatie nog bezig is, Apache het proces levend houdt en dus het geheugen bezet houdt.
Pagina: 1