Toon posts:

[Apache] Hoeveel geheugen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik was laatst aan het experimenteren met Squid, bleek het geheugen op m'n servertje behoorlijk vol te zijn (128mb), dus ik shutdown Squid en kwam er iets (niet veel) geheugen vrij.
Vreemdgenoeg herstartte ik laatste Apache (1.2.27 geloof ik) en BOEM, ineens gebruikte m'n server weer 27mb (zonder cache). Nu loopt het gebruik weer op naar over de 60mb en begin ik me af te vragen of dit normaal is.
Ik draai Apache met 5 tot 10 spares geloof ik, maar dat dit tientallen (of meer) megabytes op moet vreten lijkt me sterk. :?
Hoe kan dit? Weet iemand hier meer over?
Extra info: Kernel 2.2.20, 128mb ram, 512 swap, Pentium2-300Mhz.

Verwijderd

NOS FAQ over geheugengebruik
Heb je dat gelezen ? Zeker weten dat het geen caching is ? Geef anders eens de output van free ?

Verwijderd

Topicstarter
Ik heb de FAQ niet gelezen, maar het gebruik dat ik noemde was zonder buffers en cache. Hieronder volgt output van free -m, en vervolgens nogmaals net nadat ik Apache opnieuw heb gestart:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@host1 ~/data/scripts# free -m
             total       used       free     shared    buffers     cached
Mem:           124        121          3         53         38         22
-/+ buffers/cache:         61         63
Swap:          517          3        514

root@host1 ~/data/scripts# /etc/init.d/httpd restart
Shutting down httpd: httpd
Starting httpd:                                            [  OK  ]

root@host1 ~/data/scripts# free -m
             total       used       free     shared    buffers     cached
Mem:           124         88         36         19         38         23
-/+ buffers/cache:         26         97
Swap:          517          3        514

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 05-05 10:41

Bergen

Spellingscontroleur

Dat is dus heel normaal ja. Lees de FAQ toch maar even. ;) Geheugen wordt pas vrijgegeven als dat nodig is.

  • Wilke
  • Registratie: December 2000
  • Laatst online: 10:46
Mwahh...ja, waarschijnlijk wel, maar ik kan het hier nog niet heel duidelijk in zien. Als je 'top' start, sorteert op geheugengebruik ('M' indrukken), wat staat er dan bij 'SIZE', 'RSS' en 'SHARE' van apache? En als apache niet eens hoog in de lijst staat is het sowieso geen probleem natuurlijk...

Maar ik denk niet dat hier iets aan de hand is verder, lees vooral eerst de FAQ daarover.

Iets anders wat ik me afvraag: waarom kom je hiermee? Draait die bak voor geen meter, en loopt 'ie continu te swappen ofzo? Zo niet, why bother?

[ Voor 16% gewijzigd door Wilke op 12-03-2003 15:19 ]


Verwijderd

Topicstarter
Wilke schreef op 12 March 2003 @ 15:16:
Mwahh...ja, waarschijnlijk wel, maar ik kan het hier nog niet heel duidelijk in zien.
Het was nog een stuk erger, maar dan moet ik Apache waarschijnlijk langer laten draaien.
Als je 'top' start, sorteert op geheugengebruik ('M' indrukken), wat staat er dan bij 'SIZE', 'RSS' en 'SHARE' van apache? En als apache niet eens hoog in de lijst staat is het sowieso geen probleem natuurlijk...
Apache staat wel hoog, maar ik weet niet of dit extreem of normaal is?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
21571 root       0   0  9200 8728  2764 S     0.0  6.8   0:21 ravmd
16953 nobody     0   0  7836 7836  3524 S     0.0  6.1   0:11 httpd
16954 nobody     0   0  7824 7824  3536 S     0.0  6.1   0:29 httpd
22254 nobody     0   0  7624 7624  3544 S     0.0  5.9   0:45 httpd
22253 nobody     0   0  7568 7568  3524 S     0.0  5.9   0:54 httpd
16955 nobody     0   0  7404 7404  3528 S     0.0  5.7   1:03 httpd
17009 nobody     0   0  6984 6984  3520 S     0.0  5.4   0:22 httpd
17008 nobody     0   0  3432 3432  3260 S     0.0  2.6   0:00 httpd
22252 nobody     0   0  3356 3356  3240 S     0.0  2.6   0:00 httpd
16951 nobody     0   0  3336 3336  3216 S     0.0  2.6   0:00 httpd
16952 nobody     0   0  3336 3336  3216 S     0.0  2.6   0:00 httpd
16947 root       0   0  3272 3272  3176 S     0.0  2.5   0:00 httpd
 4182 root       0   0  3380 2920  2848 S     0.0  2.2   0:00 ravmd
 9408 root       0   0  1812 1812  1448 S     0.0  1.4   0:01 sshd
27870 named      0   0  1832 1564   772 S     0.0  1.2   0:19 named
etc... etc...
Iets anders wat ik me afvraag: waarom kom je hiermee? Draait die bak voor geen meter, en loopt 'ie continu te swappen ofzo? Zo niet, why bother?
De reden dat ik hiermee kom is omdat ik dit nog nooit eerder heb geconstateerd en ik nu sinds een tijdje een rare delay constateer bij het command 'mailq' van Postfix. Ik draai dat command meestal via shell, maar deed het laatst op de console en toen hoorde ik de HD dom maar stug ratelen tijdens dat commando.
Nu ik Apache herstart en er weer meer geheugen vrij is, draait mailq ook ineens weer als een trein. Het voelt aan alsof het systeem nu wel genoeg ruimte heeft om het commando te cachen.
En even voor de duidelijkheid, in m'n voorbeeld springt ie van 61 naar 26, maar ik heb hem dus van over de 90 naar de 27 zien gaan na een Apache restart.
Ik heb gewoon het gevoel dat er op 1 of andere manier ergens een geheugen lek zit oid, vandaar dat ik me afvroeg hoe het geheugengebruik van Apache is op andere machines.

Na een kort overleg en heropening van het topic (bedankt hiervoor) zou ik graag m'n vraag duidelijker willen formuleren:

1) Kan iemand zijn Apache herstarten om te zien of dit 'gedrag' normaal is?
(zie eerder gepostte output van free -m)

2) Krijgt iemand met TOP gesorteerd op 'M' een soortgelijk beeld als mijn output?
Die size, rss en share zeggen mij namelijk weinig.

3) Kan dit te maken hebben met Squirrelmail die ik recent heb geinstalleerd?
Hoewel deze maar door 2 personen wordt gebruikt.

Bedankt voor de moeite!

  • Wilke
  • Registratie: December 2000
  • Laatst online: 10:46
Mijn apache trekt nauwelijks hits, dus het maakt hier ook niet echt uit als ik 'm restart.

Draaien er toevallig geen scripts op die memory leaks veroorzaken?

In Apache2 kun je van alles reguleren over het aantal requests dat een thread mag afhandelen voordat hij afgesloten wordt - om te zorgen dat evt. memory leaks geen kans krijgen, aangezien de thread om de zoveel requests opnieuw gestart wordt -, en hoeveel threads er min/max mogen zijn etc.

In Apache1 kan een deel hiervan volgens mij ook, zoek daar eens naar....

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 02-05 18:38

deadinspace

The what goes where now?

Dat Apache direct na het starten kleiner is dan na een tijd dienst gedaan te hebben is op zich normaal.

Als je Apache start, dan krijg je één process (het parent process). Dit parent process accepteert connecties, maar handelt de connecties niet af. Voor het afhandelen van connecties forkt het parent process children (één child per connectie). Direct na het starten zal Apache een aantal children forken om de minimale grootte van de pool te bereiken.

Een fork is een directe kopie van een process. Als Apache direct na het starten 6 children forkt, dan heb je dus 7 (vrijwel) identieke processes. Fork wordt in GNU/Linux (en in veel andere Unices) geimplementeerd met een copy-on-write techniek. Dat komt er in het kort op neer dat stukken geheugen van een child die niet gewijzigd zijn sinds de fork (en dus hetzelfde zijn in zowel de parent als de child) maar één keer in het fysieke geheugen voorkomen. Alleen stukken geheugen die verschillen tussen de parent en de child zullen ieder een eigen stuk geheugen krijgen. Aangezien die verse childs vrijwel geheel identiek zijn aan de parent zullen deze childs maar heel weinig geheugen kosten.

Maar als zo'n child connecties moet gaan verwerken, dan verandert er vanalles in die child (variabelen en data structuren e.d.), waardoor die child voor geheugen steeds minder gebruik kan maken van hetzelfde geheugen als de parent.

Dus het verschijnsel is tot op zekere hoogte normaal in een Apache die ook werkelijk wat doet. Maar er is meer. Het kan zijn dat Apache, of een van de gebruikte modules (zoals PHP, mod_gzip, mod_rewrite, etc) een memleak bevat, waardoor het process gestaag groeit en blijft groeien. Dat is niet de bedoeling, maar het komt voor. Apache gaat dit tegen door childs die een bepaalde hoeveelheid connections afgehandeld hebben af te sluiten en een nieuwe child te starten.

Dus, ga eens spelen met de parameters die Wilke al noemde (Apache1 heeft ze ook).

Overigens zouden een "free -m" en "ps auxf" output op het moment dat je er echt last van hebt wel interessant zijn.

Verwijderd

Topicstarter
Wilke schreef op 13 maart 2003 @ 14:15:
Draaien er toevallig geen scripts op die memory leaks veroorzaken?
Geen idee, gewoon een aantal kleine statische websites, Squirrelmail, en nog een paar PHP dingetjes die nauwelijks worden gebruikt.

Wat betreft parameters en spares/childprocesses, het betreft een standaard compilatie van Apache, echt weinig bijzonders verder. Het aantal childprocesses loopt al snel op naar 10 (m'n maximum) en vervolgens lijken ze in geheugengebruik te groeien. En veel hits trek ik echt niet.
Verder kan ik het niet zo goed reproduceren omdat het enige tijd duurt voordat Apache meer geheugen in beslag heeft genomen.

Verwijderd

Topicstarter
Dit is TOP 'M' enkele minuten nadat ik Apache heb herstart.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
21571 root       0   0  9200 8728  2764 S     0.0  6.8   0:21 ravmd
27403 nobody     0   0  3440 3440  3256 S     0.0  2.6   0:00 httpd
27372 nobody     0   0  3436 3436  3252 S     0.0  2.6   0:00 httpd
27371 nobody     0   0  3432 3432  3252 S     0.0  2.6   0:00 httpd
27402 nobody     0   0  3356 3356  3240 S     0.0  2.6   0:00 httpd
27404 nobody     0   0  3356 3356  3240 S     0.0  2.6   0:00 httpd
27369 nobody     0   0  3336 3336  3216 S     0.0  2.6   0:00 httpd
27370 nobody     0   0  3336 3336  3216 S     0.0  2.6   0:00 httpd
27373 nobody     0   0  3336 3336  3216 S     0.0  2.6   0:00 httpd
27366 root       0   0  3272 3272  3176 S     0.0  2.5   0:00 httpd
 4182 root       0   0  3380 2920  2848 S     0.0  2.2   0:00 ravmd
 9408 root       1   0  1812 1812  1448 S     0.1  1.4   0:01 sshd
27870 named      0   0  1832 1564   772 S     0.0  1.2   0:19 named

  • Robinski
  • Registratie: September 2000
  • Laatst online: 12-04 21:52

Robinski

A.K.A. RHarmsen

dit zelfde gedrach vertoond apache2 onder windows2000 SP3 ook
als apache een tijdje heeft gedraaid gebruikt hij veel meer geheugen

10xAXItec AC-265P = 2,650kWp @ SolarEdge SE2200 - PVOutput

Pagina: 1