[apache2] performance tuning

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

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Hoi

Ik heb een website waar muziek (mp3) gestreamed kan worden. Nu komen er veel bezoekers en de load van het ding wordt te hoog. Ik heb al wat zitten tweaken maar ik kom niet ver genoeg.

De files op de site zijn nogal groot, gemiddeld 50 tot 150 Mb per stuk.

De config is:
Debian Sarge
apache-2.0.54 (prefork mpm)
PHP-5.0.4 met modules
kernel 2.6.11.3
Pentium 4 2.8 ghz
Areca controller (=snel)
2560 Mb ram
e1000 NIC


Het relevante stuk uit mijn config (denk ik) is:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3

<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 96
MaxRequestsPerChild 0
</IfModule>

In de vhost voor de site heb ik hetvolgende staan:
EnableMMAP Off

Dit bracht al enige verlichting.

De load hangt tussen de 2 en de 10 in, waardoor hij erg traag wordt.
Met de status module zie ik dat er in 6 uur ca. 50000 accesses zijn, traffic 53 Gb, 1.9 request/sec.

een top output:

top - 18:39:47 up 1 day, 23:39,  1 user,  load average: 9.07, 8.80, 7.03
Tasks: 183 total,   2 running, 180 sleeping,   0 stopped,   1 zombie
Cpu(s):  1.0% us,  1.7% sy,  0.0% ni, 13.6% id, 71.4% wa,  4.7% hi,  7.6% si
Mem:   2597192k total,  2528136k used,    69056k free,     6384k buffers
Swap:  1028152k total,     8048k used,  1020104k free,  1921172k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6115 root      16   0  2276 1136  840 R  0.7  0.0   0:00.27 top
  151 root      15   0     0    0    0 S  0.3  0.0   4:41.22 kswapd0
  902 www-data  15   0 20428  12m 3784 S  0.3  0.5   0:11.29 apache2
  932 www-data  15   0 20940  12m 3784 S  0.3  0.5   0:06.61 apache2
 1032 www-data  15   0 20660  12m 3800 S  0.3  0.5   0:13.35 apache2
 1269 www-data  15   0 20856  12m 3848 S  0.3  0.5   0:08.05 apache2
 1320 www-data  15   0 21068  12m 3728 S  0.3  0.5   0:03.05 apache2
 1410 www-data  15   0 19724  11m 3768 S  0.3  0.5   0:10.41 apache2
 2427 www-data  15   0 20608  12m 3800 S  0.3  0.5   0:05.98 apache2
 2468 www-data  15   0 20636  12m 3780 S  0.3  0.5   0:07.69 apache2
 2899 www-data  15   0 20852  12m 3864 S  0.3  0.5   0:03.76 apache2
    1 root      16   0  1604  532  464 S  0.0  0.0   0:00.57 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.02 ksoftirqd/0
    3 root      10  -5     0    0    0 S  0.0  0.0   0:02.92 events/0
    4 root      11  -5     0    0    0 S  0.0  0.0   0:00.02 khelper
    9 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kthread
   18 root      20  -5     0    0    0 S  0.0  0.0   0:00.00 kacpid




Disk IO:
 hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads:  332 MB in  3.01 seconds = 110.46 MB/sec

Iemand een tip hoe ik e.e.a. verder kan optimaliseren?

edit:
heb prefork mpm natuurlijk en geen worker 8)7

[ Voor 54% gewijzigd door usr-local-dick op 30-06-2005 11:52 ]


  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 10:45
Vaag dat je zo'n hoge load hebt terwijl er amper CPU gebruikt wordt :S Verder zie ik in het top lijstje geen processen met status D (waiting for IO). Het enige wat mij opvalt is dat je kswapd0 bijna 8% van je uptime aan cpu time opgeslokt heeft.

Op het moment dat je het 'screenshot' van top maakte was er neem ik aan wel een hoop IO?

Wat gebeurd er trouwens met de load als je een stuk of 3 bonnie++'s loslaat op het filesystem waar je files staan? Wordt er nog veel geupload naar die server?

[ Voor 22% gewijzigd door Jelmer op 29-06-2005 20:00 ]


  • Arnout
  • Registratie: December 2000
  • Laatst online: 10-02 17:38
Het lijkt me zo te zien dat je disk wel degelijk het probleem is.

53Gb/6 uur = 2,45 mb / seconde, dit lijkt weinig.

Echter, ik zie in je top dat er 9 apache processen zijn, en omdat je een worker apache hebt, zullen daaronder nog een aantal threads per process hangen. Dan heb je toch heel wat individuele reads op de disk (de hoge wait % duidt hier ook op). Stel dat er 50 downloads tegelijk lopen, dan moet de schijf het heel druk hebben met het steeds wisselen naar een ander stuk. Access time is erg belangrijk in deze situatie. Omdat de files redelijk groot zijn wordt er ook niet goed gebufferd denk ik (alhoewel je wel een flinke sloot geheugen hebt).

Ik denk dat een snelle harde schijf erg belangrijk is, maar daarmee ben je er nog niet, misschien moet je de content verdelen over 2 harde schijven, of je zet een RAID 0+1 op.

Andere optie is, om apache te limiteren, zodat er een max aantal threads is, zodat de schijf minder hoeft te switchen. Dit zou een flinke verbetering van de downloadsnelheid opleveren, waardoor er meer data in totaal verstouwd kan worden. Ik kan het niet met zekerheid zeggen maar volgens mij zit je server aan z'n max op deze manier.

[ Voor 17% gewijzigd door Arnout op 30-06-2005 11:29 ]


  • usr-local-dick
  • Registratie: September 2001
  • Niet online
omdat je een worker apache hebt, zullen daaronder nog een aantal threads per process hangen.
ik heb een prefork, zat te slapen denk ik toen ik worker intiepte ....

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

moto-moi

Ja, ik haat jou ook :w

wat zegt vmstat 5 hierover ? :)

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


  • usr-local-dick
  • Registratie: September 2001
  • Niet online
die laat ik even een tijdje draaien, eens kijken wat er te zien is als het weer een beetje druk wordt op:

http://mixes.cajones.org/

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Hmmm ik ben voor de grap eens de standaard debian kernel (2.6.8-2-386) geboot in plaats van mijn 2.6.11.6-1-686-smp kernel en nu blijft de load hangen rond de 0.1 tot 0.2.
En dan gebruikt de kernel nog maar 1 Gb ram (geen highmem).
Ik ga nu een highmem kernel bakken :)

PS kan het zijn dat het komt doordat de kernel met gcc-2.95 is gemaakt en het systeem Sarge is (met alles gcc3.2 gecompileerd?

[ Voor 19% gewijzigd door usr-local-dick op 30-06-2005 14:08 ]


  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 10:45
Als highmem geen problemen geeft ben ik heel benieuwd wat er gebeurt met een debian stock kernel met smp support. (immers, de 2.6.8.2 is non-smp, die van jezelf wel)

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Ik kan geen echte stock kernel gebruiken vanwege mijn controller.
Maar ik heb de gulden midden weg gevonden. De debian sources van 2.6.8, daar de .config van de 2.6.8-2-386 in gehangen, toen alleen de highmem supprot aangezet en P4 CPU support, controller module erbij en gecompileerd. Hij draait nu als een zonnetje.
Machine trekt continue 100 Mbit en load schommelt tussen 0 en 0.5 :)

edit:
nu uitzoeken waarom die 2.6.11.x zo rot is

[ Voor 8% gewijzigd door usr-local-dick op 01-07-2005 00:30 ]


  • Wilke
  • Registratie: December 2000
  • Laatst online: 10-02 22:54
Jelmer schreef op woensdag 29 juni 2005 @ 19:55:
Vaag dat je zo'n hoge load hebt terwijl er amper CPU gebruikt wordt :S
Beetje late reactie, maar nee hoor, dat is helemaal niet raar. I/O verhoogt de load ook. Load is simpelweg het aantal processen dat in de wachtrij staat om uitgevoerd te worden. Als alle processen staan te wachten op I/O, gebruiken ze dus totaal geen CPU maar kan de load toch achterlijk hoog zijn.=

offtopic:
Btw. wat is dat rare :S ding dat je in je post zet :? ja ja ik weet het antwoord wel hoor..maar dit is dus een ander medium...

[ Voor 13% gewijzigd door Wilke op 01-07-2005 00:37 ]


  • Arnout
  • Registratie: December 2000
  • Laatst online: 10-02 17:38
Dan heb je idd wel een erg brakke kernel gehad... Ik vond de load ook al zo hoog gezien je specs.

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 10:45
Wilke schreef op vrijdag 01 juli 2005 @ 00:36:
[...]


Beetje late reactie, maar nee hoor, dat is helemaal niet raar. I/O verhoogt de load ook. Load is simpelweg het aantal processen dat in de wachtrij staat om uitgevoerd te worden. Als alle processen staan te wachten op I/O, gebruiken ze dus totaal geen CPU maar kan de load toch achterlijk hoog zijn.=
Ja maar dan hoor je dus processen te hebben met status D toch en die zie ik niet :?
offtopic:
Btw. wat is dat rare :S ding dat je in je post zet :? ja ja ik weet het antwoord wel hoor..maar dit is dus een ander medium...
offtopic:
Ik gooi ze regelmatig doorelkaar ja en was te lui om het te veranderen O-)... Bijv :X is op dat andere medium ook iets heeeeel anders.. Dat heeft een paar keer erg ludieke situaties opgeleverd.
Pagina: 1