Toon posts:

[Apache] optimaliseren voor drukke server

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wij hebben een server in gebruik voor een hele drukke website. Nu wil het weleens gebeuren dat die server "wegloopt". Een load van 10 op een freebsd 4.11 installatie met P4 2.8GHz 2GB ram, is heel normaal. Regelmatig zelfs gekker. Die server reageert nog wel, maar echt snel is ie niet meer. Dit is een drukke php/mysql site waar gebruik gemaakt wordt van queries in cache. Om het performance probleem op te lossen hebben we de database op een dedicated mysql server gezet, dit scheelt wel iets, maar we hadden verwacht dat de queries voor de grrotste belasting zorgden. Blijkbaar is het dus apache die zich suf werkt :)

Het betreft een website met 500.000 hits (!!! hits !!!) per dag. Apache heeft 35.2 requests/sec
Apache versie is 1.3.33 en we hebben al het nodige geprobeerd te tweaken, maar echt helpen doet het niet. Denken jullie dat hier nog iets aan te verbeteren valt of is de server simpelweg uit zijn jasje gegroeid en moeten we gaan load balancen tussen 2 of meer servers? De uitdaging is eigenlijk wel om die load met deze server lager te krijgen :D

Huidige config (relevante settings):
code:
1
2
3
4
5
6
7
8
9
10
11
ResourceConfig /dev/null
AccessConfig   /dev/null
TimeOut 300
KeepAlive on
MaxKeepAliveRequests 0
KeepAliveTimeout 5
MinSpareServers 20
MaxSpareServers 40
StartServers 40
MaxClients 200
MaxRequestsPerChild 10000


# fstat | wc -l
3664
(fstat to check file descriptor usage)

top output:
code:
1
2
3
4
5
load averages: 21.69, 13.41,  8.79                                                 up 141+10:57:07 16:18:08
248 processes: 17 running, 230 sleeping, 1 zombie
CPU states: 91.9% user,  0.0% nice,  6.2% system,  1.9% interrupt,  0.0% idle
Mem: 495M Active, 1155M Inact, 251M Wired, 92M Cache, 199M Buf, 7284K Free
Swap: 2015M Total, 1512K Used, 2013M Free

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Je zou plaatjes op een andere webserver kunnen zetten (evt op dezelfde machine via ander ip of poort). Apache is niet erg zuinig, en plaatjes met bv. thttpd scheelt al een stuk.
Dat geldt niet alleen voor plaatjes, maar voor alle statische content.

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 16:34

pistole

Frutter

wellicht dat je ook eens in je logs (of met /server-status) moet checken of er bepaalde php scripts zijn die de server 'neerhalen'.
Er hoeft maar één stuk ranzige code in te zitten / foute query / missende index om iedere server op z'n knietjes te krijgen...

Ik frut, dus ik epibreer


  • Arnout
  • Registratie: December 2000
  • Laatst online: 05-02 22:41
Als het echt PHP is die traag is kun je proberen een test te doen met de PHP accelerator van Zend.
Anders wordt het toch echt in de source duiken en bottlenecks opruimen.

  • Wilke
  • Registratie: December 2000
  • Laatst online: 20:29
Is het allemaal dynamische content? Want dan is gemiddeld 5 requests/seconde over de hele dag inderdaad best veel.

Weet je trouwens zeker dat het aan Apache ligt en niet aan "slechte" SQL-queries? Want als Apache daar vervolgens op gaat wachten, schiet het alsnog niet echt op natuurlijk...

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Installeer eerst eens eAccellerator, dat maakt het hele PHP-gebeuren al een stuk sneller. Als 't dan langzaam blijft is 't denk ik aan te raden om een tweede machine te regelen en wat te load balancen (met LVS kan je DB server dat eventueel doen.)

All my posts are provided as-is. They come with NO WARRANTY at all.


Verwijderd

Topicstarter
Bedankt voor jullie reacties.
- Zeker weten dat het niet aan de queries ligt? nee, niet zeker, maar ik kan het me niet voorstellen, er is een dedicated mysql server met quad CPU en een 100Mbit/s link ertussen. Die queries worden behoorlijk snel uitgevoerd. Ik heb de code zelf niet gemaakt en het is behoorlijk veel, dus alles nakijken is ook geen optie, maar het is wel gemaakt door mensen die weten wat ze doen. Er is al geoptimaliseerd door veel voorkomende queries te cachen. Dat heeft voorkomen dat de server volledig ontoegankelijk wordt. Nu blijft alles werken, maar best langzaam.

- Code compileren voor snellere uitvoer is geen slecht idee :) Zend of eAccelerator. Even wat informatie over zoeken en testen op een andere server.

- Het is allemaal dynamische content en apachectl status geeft de volgende output:
code:
1
2
27.7 requests/sec
200 requests currently being processed, 0 idle servers


Mogelijk is dit gewoon het theoretisch maximum van apache.

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Wat is de cpu load (in %, uit Top) van die doos? Want dat maximum van 200 valt nog wel op te rekken als er nog wat cputijd over is.

All my posts are provided as-is. They come with NO WARRANTY at all.


  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 11:38

WHiZZi

Museumdirecteurtje

Toevallig ben ik hier ook mee bezig. Ik merk wel een aanzienlijk verschil tussen Apache 1.3.xx en Apache 2.xx. Ik beheer ook een hele drukke webserver waar tot voor kort de load ook regelmatig rond de 60 tot 70 lag (en dan draait er dus 1 website op!)

MySQL staat ook remote. De website bestaat ook uit dynamische content.

Sinds ik de webserver heb geupgrade naar Apache 2 en kernel 2.6 is de server merkbaar sneller met serveren van pagina's. We draaien nu al een week op deze config en de load blijft nu rond de 2 ergens. Bovendien lijkt de pagina ook sneller gerendert te worden.

Wellicht een optie om te proberen :?

Hoofdzakelijke reden dat Apache 1.3 trager was op onze server is dat er per child maar 1 request kan worden afgewerkt. Apache 2 kan meerdere requests per child plaatsen waardoor er dus minder childs nodig zijn.
onzewebserver/server-status
Server Version: Apache/2.0.54 (Debian GNU/Linux) PHP/4.4.0-4
Server Built: Sep 5 2005 11:15:09

Current Time: Friday, 11-Nov-2005 18:40:16 CET
Restart Time: Sunday, 06-Nov-2005 06:25:41 CET
Parent Server Generation: 4
Server uptime: 5 days 12 hours 14 minutes 34 seconds
Total accesses: 4618 - Total Traffic: 15.6 MB
CPU Usage: u9.22 s.96 cu0 cs0 - .00214% CPU load
.0097 requests/sec - 34 B/second - 3537 B/request
161 requests currently being processed, 74 idle workers

[ Voor 27% gewijzigd door WHiZZi op 11-11-2005 18:40 . Reden: meer info toegevoegd ]

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

wat zegt vmstat 5 (stuk of 10 regels uitvoer is voldoende)
Want ik verwacht eigenlijk dat je bottlenek niet apache is maar de machine zelf.

God, root, what is difference? | Talga Vassternich | IBM zuigt


  • FunzoneQ!
  • Registratie: Oktober 2002
  • Laatst online: 15-11-2024

FunzoneQ!

Nee

Een paar dingen die je kan doen om je load te verlagen zijn:
- eAccelerator installeren
-statische content via lighttpd (in combinatie met PHP mogelijk) thttpd is ook een optie, maar kan geen PHP en crashte bij mij ook zonder een reden in de logs op te geven.
-indien je hardeschijf te druk is onder freebsd, kan je upgraden naar versie 6.0 omdat die een aanzienlijke performance heeft in disk IO.
-in FreeBSD kan je loadbalancen met plb of pure load balancer, tevens is er Linux Virtual Server (LVS) voor FreeBSD, icm keepalive.
-installeer mytop om te kunnen zien of je queries wel optimaal lopen, indien dit niet het geval is, voeg INDEXES toe! (mayor performance improvement!)
-zet je mysql slow query log aan op 5 seconden oid, haal de langzame queries er uit.
-searches in MySQL met full-text search ipv WHERE blabla LIKE '%woei%'

.. zo .. ik heb toch aardig wat optimalisatie doorgevoerd ;)

Bla


Verwijderd

Topicstarter
Sorry voor mijn late reactie, maar hierbij nog wat info waar om werd gevraagd.
code:
1
2
3
4
5
last pid: 28973;  load averages: 57.50, 55.52, 57.72                                                 up 148+11:31:10 16:51:17
251 processes: 66 running, 184 sleeping, 1 zombie
CPU states: 93.4% user,  0.0% nice,  6.3% system,  0.4% interrupt,  0.0% idle
Mem: 585M Active, 1066M Inact, 259M Wired, 83M Cache, 199M Buf, 6976K Free
Swap: 2015M Total, 1448K Used, 2013M Free

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vmstat 5
 procs      memory      page                    disks     faults      cpu
 r b w     avm    fre  flt  re  pi  po  fr  sr ad4 ad6   in   sy  cs us sy id
68 1 0  643812  92564  217   0   0   0 272  73   0   0   28  316  65 30  8 62
63 1 0  642436  93200   13   0   0   0  52   0  55  55  533 3997 151 90 10  0
75 1 0  613216  92852   26   0   0   0  11   0   4   4 1158 11309 345 93  7  0
73 1 0  609184  93476   30   0   0   0  75   0  15  14 1087 10105 277 93  7  0
33 1 0  610656  93680   16   0   0   0  30   0  12  13  871 6702 246 92  8  0
35 1 0  611020  93872    7   0   0   0  18   0   0   0  619 6794 232 90 10  0
44 1 0  613420  93856    3   0   0   0   4   0   9   9  634 6330 231 90 10  0
46 2 0  641216  93552  119   0   0   0  97   0  30  30  977 8812 271 92  8  0
71 1 0  620624  92676  166   0   0   0 117   0   5   5 1689 18862 649 92  8  0
59 1 0  620920  91916  254   0   0   0 196   0  17  17 1898 18634 666 92  8  0
64 1 0  614668  91704   16   0   0   0   8   0   5   5  819 9470 281 91  9  0
67 1 0  620452  92396   42   0   0   0  85   0  21  21 1307 11887 374 94  6  0

Apache2 klinkt wel als een goede optie, maar ja, om zo'n drukke productieserver naar apache2 te migreren. Dat moet wel goed gepland worden.
Drukte van de harddisk valt mee:
code:
1
2
3
4
5
6
7
8
9
10
11
12
iostat 5
      tty             ad4              ad6              fd0             cpu
 tin tout  KB/t tps  MB/s   KB/t tps  MB/s   KB/t tps  MB/s  us ni sy in id
   0   63  0.00   0  0.00   0.00   0  0.00   0.00   0  0.00  30  0  7  0 62
   0   15 12.89   2  0.02  12.89   2  0.02   0.00   0  0.00  93  0  6  1  0
   0   15 15.55  61  0.93  15.55  61  0.93   0.00   0  0.00  91  0  6  3  0
   0   15  9.78   2  0.02   9.40   2  0.02   0.00   0  0.00  93  0  5  1  0
   0   14 13.33   1  0.01  11.20   1  0.01   0.00   0  0.00  95  0  4  1  0
   0   15  9.06   9  0.08   9.06   9  0.08   0.00   0  0.00  92  0  6  2  0
   0   15 15.45   2  0.03  15.45   2  0.03   0.00   0  0.00  92  0  6  2  0
   0   15 11.56   2  0.02  11.56   2  0.02   0.00   0  0.00  95  0  4  1  0
   0   15 15.25  65  0.97  15.25  65  0.97   0.00   0  0.00  92  0  5  3  0

De dedicated mysqlserver. Let op: deze wordt ook nog door iemand anders gebruikt.
code:
1
2
mysqladmin status
Uptime: 185237  Threads: 26  Questions: 1849722  Slow queries: 55  Opens: 306  Flush tables: 1  Open tables: 295  Queries per second avg: 9.986

De database server houdt zich met een load onder de 0.05 dus daar zal het probleem niet zitten.
Pagina: 1