Ik loop al een tijdje een 'duidelijk' antwoord te zoeken maar dat wil niet helemaal lukken.
Op dit moment hebben we een SQL server en een PHP/Apache server. Beide communicren met elkaar over het netwerk en beide zijn het P4 2.4GHZ systemen.
Nu krijgen we vooral in de avond uren gigantisch veel traffic, elke seconde wel een pageview.
De content is elke view anders per gebruiker, dus caching is ook geen optie.
De load (zoals in 'top' vermeld) van de mysql server piekt op een load van 14 en die van de php rond de 200. (Dan is er dus een timout bij een request en dat resulteert in dat iedereen wegvalt en de piek opnieuw opbouwt).
Nu snap ik weinig van vmstat en kan ik er ook weinig info over vinden hoe je dit precies moet interpeteren. Hier enige voorbeelden van momenten dat de load hoog is op beide servers:
PHP server:
SQL server:
Mijn vragen zijn concreet:
Is de i/o hier ook de bottleneck? Of alleen de CPU?
Als we van die 2 servers alles, sql en php/apache op 1 hele dikke server gooien (dual xeon bijv.) helpt dat? Of moet hier duidelijk gezocht worden naar een uitgebreidere oplossing (3 servers, load balancing etc..) ?
Bedenk wel dat we op langere termijn overgaan op een java framework, en het hele php achterlaten.
En dat de php-code al vele malen geoptimaliseerd is. (De load was nog veel hoger).
Dus de oplossing moet 'nu' direct werken en het platform nog even dragen.
Zelf zouden we kiezen voor 1 hele dikke server en daar alles op draaien.
Omdat ik de indruk heb dat de i/o op sql server de boosdoender is en de cpu op php server. Als je dat combineert en deelt door 2 (omdat alles sneller is) zou de load nog maar 50 moeten zijn op piek momenten ? Is dit zo, of leert de ervaring dat een php/mysql server die veel load genereert niet meer te redden is?
Op dit moment hebben we een SQL server en een PHP/Apache server. Beide communicren met elkaar over het netwerk en beide zijn het P4 2.4GHZ systemen.
Nu krijgen we vooral in de avond uren gigantisch veel traffic, elke seconde wel een pageview.
De content is elke view anders per gebruiker, dus caching is ook geen optie.
De load (zoals in 'top' vermeld) van de mysql server piekt op een load van 14 en die van de php rond de 200. (Dan is er dus een timout bij een request en dat resulteert in dat iedereen wegvalt en de piek opnieuw opbouwt).
Nu snap ik weinig van vmstat en kan ik er ook weinig info over vinden hoe je dit precies moet interpeteren. Hier enige voorbeelden van momenten dat de load hoog is op beide servers:
PHP server:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 14 0 398648 165364 111968 466428 5 4 6 6 7 2 36 8 55 0 7 0 398648 174152 111968 466428 0 0 0 0 11146 8449 65 35 0 0 7 0 398648 173704 111968 466432 0 0 0 0 8129 6067 69 31 0 0 7 0 398648 175296 111968 466436 0 0 0 0 11263 8541 65 35 0 0 6 0 398648 174052 111976 466440 0 0 0 775 9732 7979 69 31 0 0 9 0 398648 172380 111976 466440 0 0 0 0 9977 7543 74 26 0 0 8 0 398648 159676 111976 466448 0 0 3 0 7230 4983 74 26 0 0 8 0 398648 158696 111976 466452 0 0 0 0 8331 5703 68 32 0 0 9 2 398648 157616 111980 466448 0 0 0 617 6497 5049 73 27 0 0 7 0 398648 158460 111980 466452 0 0 0 1 8561 6840 77 23 0 0 |
SQL server:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 10 2 860 81432 86604 649868 0 0 5 9 6 3 33 8 59 0 0 0 860 84160 86604 649880 0 0 0 1304 10774 9155 55 29 16 0 9 0 860 83972 86612 649880 0 0 0 140 9734 8470 54 12 34 0 4 0 860 84360 86612 649880 0 0 0 60 13467 10887 59 26 15 0 2 0 860 84356 86612 649880 0 0 0 0 11546 10145 45 29 27 0 4 0 860 84568 86612 649884 0 0 0 68 6994 6143 48 13 40 0 3 0 860 84544 86612 649884 0 0 0 0 9935 9093 57 16 27 0 2 0 860 84084 86612 649884 0 0 0 124 8989 8138 38 21 42 0 6 0 860 83576 86612 649884 0 0 0 0 10062 9084 53 22 25 0 4 0 860 83576 86612 649884 0 0 0 0 12478 10801 71 16 13 0 |
Mijn vragen zijn concreet:
Is de i/o hier ook de bottleneck? Of alleen de CPU?
Als we van die 2 servers alles, sql en php/apache op 1 hele dikke server gooien (dual xeon bijv.) helpt dat? Of moet hier duidelijk gezocht worden naar een uitgebreidere oplossing (3 servers, load balancing etc..) ?
Bedenk wel dat we op langere termijn overgaan op een java framework, en het hele php achterlaten.
En dat de php-code al vele malen geoptimaliseerd is. (De load was nog veel hoger).
Dus de oplossing moet 'nu' direct werken en het platform nog even dragen.
Zelf zouden we kiezen voor 1 hele dikke server en daar alles op draaien.
Omdat ik de indruk heb dat de i/o op sql server de boosdoender is en de cpu op php server. Als je dat combineert en deelt door 2 (omdat alles sneller is) zou de load nog maar 50 moeten zijn op piek momenten ? Is dit zo, of leert de ervaring dat een php/mysql server die veel load genereert niet meer te redden is?