Toon posts:

Hoe load onder controle houden (apache)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een server met 1 website erop. De server is een 2.4 ghz celeron met 128mb geheugen. Er draait verder Debian, apache, mysql en sendmail op. Nu komt het steeds vaker voor dat er ineens 100den apache processen draaien, en de server raakt dan overstuur:
11:33:02 up 33 days, 12:36, 1 user, load average: 232.10, 194.25, 146.47
Het gaat helemaal niet om een superdrukke website (10k bezoekers/dag), ik denk eerder dat het een configuratie probleem is. Het probleem lijkt bij apache te zitten omdat die op een gegeven moment zoveel processen heeft de server totaal onbenaderbaar word.

Wie heeft een tip?

  • Wilke
  • Registratie: December 2000
  • Laatst online: 12:28
Je server heeft minder geheugen dan de gemiddelde videokaart, en draait een database-server, sendmail en apache.

Of daar precies het probleem ligt is zonder meer informatie niet te zeggen, maar het zal iig niet helpen denk ik. De load is achterlijk hoog, voor een webserver is een load boven de 2 al erg veel.

Waarschijnlijk gebruiken een paar pagina's erg inefficiente queries.

Je kunt trouwens het aantal threads/processen dat apache start heel makkelijk limiteren, hoe dat moet staat gewoon in de handleiding en in de configfile.

  • Zwerver
  • Registratie: Februari 2001
  • Niet online
Hallo CreatIt. Als het probleem echt in het aantal apache processen zit dan kun je die limiteren door deze opties in je httpd.conf goed te zetten:
MinSpareServers 2
MaxSpareServers 5
StartServers 2
MaxClients 150
MaxRequestsPerChild 100
Speel daar eens mee om te kijken of het helpt... Ik vraag het me af, omdat er wel heel veel processen moeten zijn wil je zo'n load krijgen....

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer


Verwijderd

Topicstarter
Wilke schreef op 25 mei 2004 @ 11:47:
Je server heeft minder geheugen dan de gemiddelde videokaart, en draait een database-server, sendmail en apache.
Het probleem is bijna zeker niet (alleen) het geheugen. De server draait nl prima en ineens zonder aanleiding (hooguit even een piek van bezoekers) loopt die vol. De rest van de tijd is de load onder de 1

  • Lex_brugman
  • Registratie: Januari 2003
  • Laatst online: 18-02 16:08
Verwijderd schreef op 25 mei 2004 @ 11:53:
[...]

Het probleem is bijna zeker niet (alleen) het geheugen. De server draait nl prima en ineens zonder aanleiding (hooguit even een piek van bezoekers) loopt die vol. De rest van de tijd is de load onder de 1
Ik zou toch even naar het geheugen gebruik kijken want ik blijf 128mb erg weinig voor zo'n server vinden.

  • Zwerver
  • Registratie: Februari 2001
  • Niet online
Zijn je query's goed? Heb je geen brakke php oid? Want iets zorgt ervoor dat die server helemaal vol loopt, en zonder logs etc weten wij ook niet. Dus probeer eens te achterhalen wanneer het gebeurd, welke pagina er ingeladen wordt etc.

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer


  • MrBarBarian
  • Registratie: Oktober 2003
  • Laatst online: 07-03-2023
Verwijderd schreef op 25 mei 2004 @ 11:53:
[...]

Het probleem is bijna zeker niet (alleen) het geheugen. De server draait nl prima en ineens zonder aanleiding (hooguit even een piek van bezoekers) loopt die vol. De rest van de tijd is de load onder de 1
Ik denk toch echt dat je geheugen wel het probleem is hoor! Sendmail is sowieso al een geheugenvretertje..

Hou anders eens in de gaten hoeveel geheugen er daadwerkelijk in gebruik is tijdens die pieken.

iRacing Profiel


Verwijderd

Topicstarter
Het is een YaBB forum, kan dus niet echt gaan rotzooien in de php. Maar het probleem ontstaat echt willekeurig bijna. Draait het de heletijd goed, ineens loopt ie vol. Het is net of er even een bezoekers-burst is, en apache dan over zijn bek gaat ofzo... Hij blijft dan nieuwe processen starten maar stopt ze niet meer...

Verwijderd

Ik denk zelf dat je gewoon een paar inefficiente php scripten cq sql queries hebt. Of dat je een fout maakt met file-locking binnen php oid (Als je dat tenminste gebruikt, open je files vanuit php scripten?).

  • Rembrand20
  • Registratie: Juli 2001
  • Laatst online: 22-09-2023
een standaard installatie dus zonder x gebruikt na het opstarten ongeveer iets van 70 mb aan geheugen.
OP het moment dat je machine apache clients gaat opstarten dan zul je zien dat het geheugen zo vol zit en dat je machine gaat swappen.

Dus post je httpd.conf en een free -m eens.

Model 3 LR AWD Solid Black / Black / Aero / Trekhaak - Bestelling 2-10 Leaseplan, 4-10 Tesla, RN 22-09, Nieuwe RN 25-11, VIN Yes, leverdatum: ?/?/19(?)


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#
#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 15

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 0

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

##
## Server-Pool Size Regulation (MPM specific)
## 

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       50
MinSpareServers     10
MaxSpareServers    50
MaxClients         150
MaxRequestsPerChild  5
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers       50
MaxClients         150
MinSpareThreads     10
MaxSpareThreads    50 
ThreadsPerChild     10
MaxRequestsPerChild  5
</IfModule>

# perchild MPM
# NumServers: constant number of server processes
# StartThreads: initial number of worker threads in each server process
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# MaxThreadsPerChild: maximum number of worker threads in each server process
# MaxRequestsPerChild: maximum number of connections per server process
<IfModule perchild.c>
NumServers           5
StartThreads         5
MinSpareThreads      10
MaxSpareThreads     50
MaxThreadsPerChild  10
MaxRequestsPerChild  5
</IfModule>

# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum  number of requests a server process serves
<IfModule mpm_winnt.c>
ThreadsPerChild 50
MaxRequestsPerChild  5
</IfModule>

# BeOS MPM
# StartThreads: how many threads do we initially spawn?
# MaxClients:   max number of threads we can have (1 thread == 1 client)
# MaxRequestsPerThread: maximum number of requests each thread will process
<IfModule beos.c>
StartThreads               10
MaxClients                 150
MaxRequestsPerThread       10
</IfModule>    

# NetWare MPM
# ThreadStackSize: Stack size allocated for each worker thread
# StartThreads: Number of worker threads launched at server startup
# MinSpareThreads: Minimum number of idle threads, to handle request spikes
# MaxSpareThreads: Maximum number of idle threads
# MaxThreads: Maximum number of worker threads alive at the same time
# MaxRequestsPerChild: Maximum  number of requests a thread serves. It is 
#                      recommended that the default value of 0 be set for this
#                      directive on NetWare.  This will allow the thread to 
#                      continue to service requests indefinitely.                          
<IfModule mpm_netware.c>
ThreadStackSize      65536
StartThreads           150
MinSpareThreads         5
MaxSpareThreads        50
MaxThreads            100
MaxRequestsPerChild      10
MaxMemFree             100
</IfModule>

# OS/2 MPM
# StartServers: Number of server processes to maintain
# MinSpareThreads: Minimum number of idle threads per process, 
#                  to handle request spikes
# MaxSpareThreads: Maximum number of idle threads per process
# MaxRequestsPerChild: Maximum number of connections per server process
<IfModule mpmt_os2.c>
StartServers           5
MinSpareThreads        5
MaxSpareThreads       10
MaxRequestsPerChild    5
</IfModule>


code:
1
2
3
4
5
6
7
 12:43:58 up 33 days, 13:47,  1 user,  load average: 0.19, 0.32, 2.31


             total       used       free     shared    buffers     cached
Mem:           115        109          6          0          1         56
-/+ buffers/cache:         51         64
Swap:          713         27        686


Ik heb even met de MaxClients ea lopen spelen en hij lijkt nu mooi te draaien, maar weet niet of dit zo blijft...

*KNIP* gewijzigd door moderator - denk je dat mensen echt de hele configfile willen lezen? Ik heb nu het stuk er uit geknipt dat over processen gaat. Denk volgende keer graag even na voor je zo'n lang stuk tekst post, waarvan slechts 10% er toe doet.

[ Voor 88% gewijzigd door Wilke op 25-05-2004 13:10 ]


  • Zwerver
  • Registratie: Februari 2001
  • Niet online
uhmz, zou je t heeeeel erg vinden om alleen de relevante delen te posten? Want hier gaat niemand serieus doorheen kijken

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer


  • Wilke
  • Registratie: December 2000
  • Laatst online: 12:28
Verwijderd schreef op 25 mei 2004 @ 12:08:
Het is een YaBB forum, kan dus niet echt gaan rotzooien in de php. Maar het probleem ontstaat echt willekeurig bijna. Draait het de heletijd goed, ineens loopt ie vol. Het is net of er even een bezoekers-burst is, en apache dan over zijn bek gaat ofzo... Hij blijft dan nieuwe processen starten maar stopt ze niet meer...
En ik kan wel een gokje wagen hoe dat komt: bezoekerspiek veroorzaakt ineens veel queries (misschien zitten er ook een paar inefficiente tussen), omdat het systeem absurd weinig geheugen heeft en blijkbaar geen handige limiet op aantal queries of apache requests is dat dus meteen op, ding gaat swappen, komen ondertussen meer queries/requests bij van nieuwe bezoekers terwijl de 'oudere' requests nog op afhandeling wachten, hele zooi blijft hangen omdat de requests eindeloos lang duren om af te handelen, herhaal dit een tijdje, effect versterkt zichzelf, server hangt praktisch.

Oplossing: meer geheugen erbij en het aantal gelijktijdige queries/requests limiteren.

Je kunt controleren of mijn bovenstaande 'gok' klopt met 'vmstat 1', deze laat zien hoeveel processen er geblokkeerd zijn (2e kolom, 'b'), en hoeveel blokken er in/uit de swap gaan (so, si), basically heb je een probleem als dit groter is dan 0 voor meer dan enkele seconden.


Iets anders: omdat dit de eerste keer is dat je hier post wordt er wat relaxeder gereageerd dan soms wel eens gebeurt, maar er zijn een paar dingen die je niet moet volhouden als je wilt dat mensen je blijven helpen:

Denk er aan dat jij een probleem hebt en graag hulp wilt. Je kunt dus een complete configfile van 1 MB posten in de hoop dat wij wel even gaan zoeken wat er mis aan is, maar zo werkt het natuurlijk niet. Zoek zelf uit in welke richting je denk dat het probleem zit, en als je er niet uit komt stel daar dan een vraag over. Het is hier namelijk geen helpdesk.

Misschien is het handig om dit eens door te lezen: Hoe vragen te stellen op het internet (in Engels).

Verwijderd

Topicstarter
Excuus dan, ik dacht dat er misschien ook andere relevante zaken in de httpd.conf zouden staan. Vandaar.

vmstat -1 ziet er volgens mij keurig uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 0  0  0  28088   8680   1320  56168   4   8     6    10   13     3   6   1   4
 0  0  0  28088   8696   1320  56168   0   0     0     0  135    23   3  22  75
 2  1  0  28088   5916   1320  56336   0   0   164     0  145   317  24   7  69
 0  0  0  28088   3704   1320  58784   0   0  2440   128  447   678  45  11  45
 0  0  0  28088   3084   1320  57172   0   0    60     0  229   395  33   4  63
 0  0  0  28088   3796   1320  56312   0   0     0     0  262   504  35   4  61
 0  0  0  28088   6396   1320  56312   0   0     0    16  213   213   7   4  89
 0  0  0  28088   6024   1320  56316   0   0     0     0  162    68   2   0  98
 0  0  0  28088   5720   1320  56316   0   0     0     0  157   120   6   2  92
 0  0  0  28088   5728   1320  56316   0   0     0     0  129    10   0   1  99
 0  0  0  28088   5436   1320  56316   0   0     0     0  200   230   2   4  94
 0  0  0  28088   5272   1320  56320   0   0     0     0  150   169  19   1  80
 3  0  0  28088   4040   1320  55464   0   0     0     0  221   848  56   7  37
 0  0  0  28088   3896   1320  55468   0   0     0     0  231   249   5   2  93
 0  0  0  28088   3896   1320  55468   0   0     0     0  117    10   0   1  99
 0  0  0  28088   3896   1320  55468   0   0     0     0  113    14   0   1  99
 0  0  0  28088   3320   1316  54600   0   0     0     0  134   102  12   1  87
 0  0  0  28088   3296   1316  54600   0   0     0     0  145   106   2   1  97
 0  0  0  28088   3304   1316  54600   0   0     0   128  136    14   0   1  99
 0  0  0  28088   3300   1316  54604   0   0     0     0  152   198  13   3  84
 0  0  0  28088   3300   1316  54604   0   0     0     0  135    60   2   0  98
 0  0  0  28088   3264   1316  54604   0   0     0     0  155   201  14   3  83
 0  0  0  28088   3296   1316  54604   0   0     0     0  128    24   0   1  99
 0  0  0  28088   3728   1300  52084   4   0     8     0  185   580  37   4  59


Maar de server loopt nu nog steeds goed sinds de httpd.conf aanpassingen, vanavond zal het wel wat meer gaan pieken dus ben benieuwd...

Verwijderd

Het ligt waarschijnlijk aan KeepAliveTimeout. Zet die laag, 1 a twee seconden en als
dat stabiel werkt, langzaam verhogen. Als het druk is, moet je gewoon heel snel nee verkopen en niet nog 15 seconden gaan wachten.

# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 2

MaxKeepAliveRequests zou op 50 zetten.

Ook ff kijken hoeveel geheugen een apache process gebruikt, en dat delen door je vrij geheugen. Dat is 128MB min wat de andere programma's gebruiken. Dan weet je hoeveel apache processen je max kan draaien. Meer heeft toch geen zin omdat je machine dan gaat swappen.
Je kan een apache process slanker maken, door minder modules te gebruiken in apache. Heel vaak staan er modules aan die je toch niet gebruik, status_module, info_module.

Verwijderd

Topicstarter
Verwijderd schreef op 25 mei 2004 @ 16:09:
Het ligt waarschijnlijk aan KeepAliveTimeout. Zet die laag, 1 a twee seconden en als
dat stabiel werkt, langzaam verhogen. Als het druk is, moet je gewoon heel snel nee verkopen en niet nog 15 seconden gaan wachten.

# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 2

MaxKeepAliveRequests zou op 50 zetten.

Ook ff kijken hoeveel geheugen een apache process gebruikt, en dat delen door je vrij geheugen. Dat is 128MB min wat de andere programma's gebruiken. Dan weet je hoeveel apache processen je max kan draaien. Meer heeft toch geen zin omdat je machine dan gaat swappen.
Je kan een apache process slanker maken, door minder modules te gebruiken in apache. Heel vaak staan er modules aan die je toch niet gebruik, status_module, info_module.
Thx, ik ga hier even mee spelen!

  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 07-02 23:33
server gebruikt nu al 27 megabyte swap....is ook niet echt fijn denk ik!

ach...in een volgend leven lach je er om!


Verwijderd

Je MaxClients staat op 150. Dus als een Apache process 1 MB gebruikt is dat al 150MB. Dat kan je machine met 128 MB nooit aan. Een apache process is ook meestal wel groter als 1MB. Het is simpeler om er meer geheugen in te zetten, dan met de configuratie te klooien. Als is het laatste leerzamer. :-)

Je kan ook nog even naar Mysql kijken. Misschien is die onder geconfigureerd en de echte bottleneck. Daardoor hopen er apache processen op die allemaal wachten op mysql. Zeker met al die OpenSource php programma's die niet altijd even efficient geschreven zijn. Je kan MySql meer geheugen, meer open connecties geven.
Controleer even /var/log/mysql/mysql-slow.log of je iets raars ziet. Queries die 10 seconden duren etc.

  • lordgandalf
  • Registratie: Februari 2002
  • Laatst online: 13-02 15:00
mischien ook eens kijken welke processen er allemal precies draaien post eens de uitput post van ps -All

Steam: Profile / Socialclub: Profile / Uplay: minedwarf / Origin: lordgandalf3

Pagina: 1