PDA

Bekijk Volledige Versie : Hoge load op VPS wanneer ik 100 keer op F5 druk.



sharkoon
25/11/11, 17:41
Hoi,

Ik krijg een hele hoge load (boven de +40) wanneer ik meerdere malen op de f5(refresh) druk op een simpele wordpress site (schone installatie, verder niks aan gedaan). De vps heeft alleen dat simpele wordpress blogje geïnstalleerd verder draait er niks op. in 2012 gaan we los met een paar projecten en we verwachten minimaal 5k bezoekers per dag, dus dat moet deze vps wel aan kunnen.

Hieronder de specificaties:
VPS, met debian 6 64bit


VPS heeft:
4096 MB ram,
100 GB diskspace
4 CPU Cores
Intel X5650, 2.67Ghz processor

Directadmin is geïnstalleerd custom build: Apache/2.2.21 & PHP 5.2.17 (cli), heb alleen csf erbij geïnstalleerd.

top command geeft mij deze gegevens wanneer de server stabiel is, en geen bezoekers:

top - 09:19:27 up 48 min, 1 user, load average: 0.00, 0.02, 0.09
Tasks: 155 total, 1 running, 154 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.6%sy, 0.0%ni, 99.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4061528k total, 531684k used, 3529844k free, 13388k buffers
Swap: 4290552k total, 0k used, 4290552k free, 159524k cached

Als ik nu op de f5 toets druk (refresh) top command geeft mij dit:

top - 09:34:58 up 1:03, 1 user, load average: 49.08, 13.48, 4.61
Tasks: 249 total, 86 running, 163 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.6%us, 97.3%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 4061528k total, 1115364k used, 2946164k free, 15080k buffers
Swap: 4290552k total, 0k used, 4290552k free, 159792k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3505 apache 20 0 106m 10m 2852 R 6 0.3 0:02.13 httpd
3520 apache 20 0 106m 10m 2852 R 6 0.3 0:02.07 httpd
3522 apache 20 0 106m 10m 2848 R 6 0.3 0:02.01 httpd
3440 apache 20 0 116m 21m 3344 R 5 0.5 0:03.30 httpd
3445 apache 20 0 115m 19m 3352 R 5 0.5 0:02.92 httpd
3451 apache 20 0 111m 16m 3304 R 5 0.4 0:02.65 httpd
3456 apache 20 0 111m 16m 3304 R 5 0.4 0:02.67 httpd
3467 apache 20 0 107m 11m 2856 R 5 0.3 0:02.45 httpd
3478 apache 20 0 106m 10m 2852 R 5 0.3 0:02.36 httpd
3479 apache 20 0 106m 10m 2852 R 5 0.3 0:02.32 httpd
3481 apache 20 0 106m 10m 2852 R 5 0.3 0:02.24 httpd
3482 apache 20 0 106m 10m 2852 R 5 0.3 0:02.35 httpd
....... etc......

Ik ben even radeloos, hoogste vps genomen bij transip, directadmin schoon geïnstalleerd en hij kan niet eens paar bezoeken af? Dat is dus niet de bedoeling ;)
Ik heb niks veranderd aan de standaard configuratie van mysql/apache.

Ik heb de vps geprobeerd met mpm worker en prefork, maar dat maakt geen verschil!
Ik weet dat transip vps nog beta is, maar dit is niet het probleem bij transip denk ik.

Wat kan hier fout gaan?

dennis0162
25/11/11, 17:48
VPSjes bij TransIP zijn nog in beta, het lijkt mij sowieso niet slim om daar al belangrijke websites op te gaan draaien.

sharkoon
25/11/11, 17:50
Dat doe ik ook niet, maar het gaat geen maanden meer duren bij transip voordat ze in productie gaan. We wachten dan ook af wanneer het productie waardig is. Ik heb niet voor niks een vps om te testen, maar dit lijkt mij niet dat het aan transip ligt..

davinci
25/11/11, 18:19
check je keep alive settings in je httpd.conf

sharkoon
25/11/11, 18:28
Dit is wat ik heb (httpd-default.conf):


Timeout 60
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 1
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Major
ServerSignature On
HostnameLookups Off

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</IfModule>

TraceEnable Off

rimote
25/11/11, 18:31
Beste TS,

Hoe lang doe je er over om 100 keer op F5 te drukken? Stel je doet daar 60 seconden over, dan is dit de load die gelijk staat aan 60 * 60 * 24 = 68400 bezoeken per dag. Je verwacht minder dan een tiende.

Daarnaast staat wordpress niet bepaald bekend om zijn snelle performance. Als geoptimaliseerd met bijv. caching-plugins?

http://codex.wordpress.org/WordPress_Optimization/Caching

patrickekkel
25/11/11, 18:48
Ten eerste al een grote tip !

Begin eerst met het instaleren van mod_ruid2

Tevens heb je voor Voor dit soort aanvragen een hele mooie modulle voor !
http://help.directadmin.com/item.php?id=302

rimote
25/11/11, 19:03
Uiterst goede tips. Al gaat het TS in eerste instantie om performance en niet om security. Maar inderdaad, er valt veel voor te zeggen dat een server 100 keer op F5 drukken simpelweg blocked. Mogelijkheden zijn op dit gebied haast eindeloos. Mod_ruid2 zou ik trouwens alleen op een hardened kernel draaien (dmv grsecurity bijv.). Er zit een set uid bit zwakheid in (als ik me niet vergis). Het werkt natuurlijk in 99.99% van de gevallen uitstekend. Ben je aan de beurt, ben je echter goed aan de beurt.

Yourwebhoster
25/11/11, 19:05
Ten eerste al een grote tip !

Begin eerst met het instaleren van mod_ruid2

Tevens heb je voor Voor dit soort aanvragen een hele mooie modulle voor !
http://help.directadmin.com/item.php?id=302
1. mod_ruid is niet voor de performance
2. hij refreshed zelf, een soort van simulatie kan je zeggen. Hoewel de url handig is, is dit niet de oplossing.

@TS Als je een support ticket opent op http://yourwebhoster.eu dan kan ik wel snel kostenloos een kijkje nemen. Als ik het probleem snel kan vinden en oplossen zal dat hier gepost worden.

patrickekkel
25/11/11, 19:33
1. mod_ruid is niet voor de performance
2. hij refreshed zelf, een soort van simulatie kan je zeggen. Hoewel de url handig is, is dit niet de oplossing.

@TS Als je een support ticket opent op http://yourwebhoster.eu dan kan ik wel snel kostenloos een kijkje nemen. Als ik het probleem snel kan vinden en oplossen zal dat hier gepost worden.

Dat mod_ruid2 niet voor de performance is wist ik maar is wel zeer belangrijk, als je kijkt naar de beveiliging

SF-Jeroen
25/11/11, 20:21
Je kan overwegen bepaalde pagina's te cachen en in het geheugen te plaatsen en zo CPU kracht (en IO) te sparen.

sharkoon
25/11/11, 21:26
bedankt, ik zal het eens proberen!

t.bloo
25/11/11, 22:27
APC cache voor PHP even installeren, dat helpt soms behoorlijk bij wordpress

Dennis
25/11/11, 22:53
SuperCache voor Wordpress is geweldig, maar een load van boven de 40 voor een paar simpele refreshes op een Wordpress-installatie, daar gaat inderdaad iets mis.

Heb je slow queries? Heb je trage IO? Je kunt eventueel time-out omlaag gooien, de /server-status bekijken (wel aanzetten in configuratie) om verder te troubleshooten? Je drukt gewoon tientallen keren achter elkaar in je eigen browser op F5? Speel vooral eens met de configuratie-instellingen van Apache, MySQL en kijk of je verbetering ziet. Kijk ook naar /server-status, naar phpMyAdmin om de draaiden queries te zien, zijn er slow queries o.i.d. Zet dan ook gelijk query caching aan in MySQL. Genoeg te doen.

Voor high-performance sowieso flink gaan cachen in statische bestanden, MySQL en eventueel via Wordpress. Er zijn prachtige caching plug-ins waarbij volgens W3 Cache de meest complete is met vooral geavanceerde opties en Supercache de meeste eenvoudige die toch extreem goed presteert (gebruik ik).

tersmitten
26/11/11, 09:30
Loop je MPM setting even goed na:



root@foobar:~# apache2 -V
Server version: Apache/2.2.14 (Ubuntu)
Server built: Nov 3 2011 03:29:23
Server's Module Magic Number: 20051115:23
Server loaded: APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=""
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"


Server MPM is Prefork dus pas <IfModule mpm_prefork_module> aan.

Deze setting gebruik ik op een Intel® Core™ i7-920 Quad-Core met 8G ram:



StartServers 80
MinSpareServers 80
MaxSpareServers 160
MaxClients 240
MaxRequestsPerChild 0


Let er vooral op dat StartServers en MinSpareServers niet te laag staan anders moet Apache bij elke request weer processen op en aftuigen (verhoogde load). Ik houd persoonlijk meestal dit aan:

StartServers = 1/3 * MaxClients
MinSpareServers = 1/3 * MaxClients
MaxSpareServers = 2/3 * MaxClients

MaxClients ≈ (RAM - size_all_other_processes) / (size_apache_process)

PS: ik gebruik PHP in combinatie met APC en dat heeft mijn `size_apache_process` gehalveerd

Let ook op KeepAlive. Ik houd meestal dit aan:



KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5


Voor veel websites kan KeepAliveTimeout nog wel lager (2 seconden?)

Hier kun je nog wat extra informatie vinden:

Apache Performance Tuning (http://www.devside.net/articles/apache-performance-tuning)
Apache server performance (http://www.howtoforge.com/configuring_apache_for_maximum_performance)