PDA

Bekijk Volledige Versie : Server load (eventueel balancing)



Bkm
15/03/06, 17:46
Hallo

Ik zit met een soort probleem, ik heb de volgende configuratie:

2x Opteron 244 (1,8 Ghz)
8x 512MB Ram
80 Gb hdd (ATA)
(Supermicro systeem)

Hier draait DA op met 1 site, een rpg game in php & mysql.

Als er 500+ leden online zijn wordt de site trager, ik heb dan een load van ongeveer 50 en er wordt ongeveer 2 GB aan geheugen gebruikt.

Mijn vraag is dus: is dat normaal/redelijk bij zoveel leden online?
(Ik weet dat het misschien moeilijk is te zeggen omdat het ook aan de site zelf ligt, maar deze is heel uitgebreid dus veel query's:
per minuut: 141 / per uur 8460 om een indruk te geven)

En als extra vraag hoe kan ik het beste de load verdelen over 2 servers?
(Er komt misschien een server bij 2x Opteron 246 / 8x 512MB Ram / 80 Gb hdd (SATA)

Kan je dit gewoon doen door de servers op elkaar aan te sluiten en dan gewoon de database op 1 server en de webserver op de andere?

Alvast bedankt!

WilloW
15/03/06, 17:48
Hallo

Ik zit met een soort probleem, ik heb de volgende configuratie:

2x Opteron 244 (1,8 Ghz)
8x 512MB Ram
80 Gb hdd (ATA)
(Supermicro systeem)

Hier draait DA op met 1 site, een rpg game in php & mysql.

Als er 500+ leden online zijn wordt de site trager, ik heb dan een load van ongeveer 50 en er wordt ongeveer 2 GB aan geheugen gebruikt.

Mijn vraag is dus: is dat normaal/redelijk bij zoveel leden online?
(Ik weet dat het misschien moeilijk is te zeggen omdat het ook aan de site zelf ligt, maar deze is heel uitgebreid dus veel query's:
per minuut: 141 / per uur 8460 om een indruk te geven)

En als extra vraag hoe kan ik het beste de load verdelen over 2 servers?
(Er komt misschien een server bij 2x Opteron 246 / 8x 512MB Ram / 80 Gb hdd (SATA)

Kan je dit gewoon doen door de servers op elkaar aan te sluiten en dan gewoon de database op 1 server en de webserver op de andere?

Alvast bedankt!



Wat veroorzaakt die load? Mysql of Httpd of iets anders

Bkm
15/03/06, 17:59
Uhm goeie vraag, ik denk de Mysql maar is daar een maniertje voor om achter te komen?

(Ik ben namelijk nieuw op dit gebied.)

Wido
15/03/06, 18:01
Uhm goeie vraag, ik denk de Mysql maar is daar een maniertje voor om achter te komen?

(Ik ben namelijk nieuw op dit gebied.)Op de SSH top intikken.

svbeek
15/03/06, 18:06
141 queries per minuut is zeker niet veel. Je zou eens moeten of mysql de meeste load veroorzaakt, en zo ja of je database en queries niet te optimaliseren zijn (of hier iemand voor in de arm nemen)

HostServe
15/03/06, 18:15
Inderdaad, eerst onderzoek doen naar wat nou voor zo een hoog load zorgt, daarna eventueel de configuraties tweaken.
Mij lijkt namelijk dat je het met zo een server makkelijk aan moet kunnen (mits is niet al te slecht gescript is).

Of je neemt inderdaad hier iemand onder de arm =)

/edit
Als je een 2e server erbij wilt nemen kan je misschien van je huidige server een database-server maken en daarnaast 2 simpele webservers kopen.
Verdeel je de webverkeer over de 2 webservers.

Succes!

XBL
15/03/06, 18:58
@HostServe: Als MySQL de load veroorzaakt is het natuurlijk niet nuttig om twee webservers te nemen. Eén webserver moet makkelijk die hits aankunnen.

Met een script als 'criminals' die ook veel (belabberde) queries uit voert in m'n achterhoofd, weet ik dat optimalisatie een heleboel kan verbeteren. Een simpele 'LIMIT 1' toevoegen indien er maar één result hoeft te zijn, kan al een verbetering opleveren (zo zoekt MySQL niet verder naar andere records als er eentje gevonden is).

Daarnaast kan je ook MySQL zelf optimaliseren. De standaard configuratie van MySQL is erg algemeen en is vaak te verbeteren voor de server specifiek.

Jochem

bram12
15/03/06, 19:07
Mijn ervaring met een aantal websites is (jijbent.nl en lastknights.com) dat het vooral de queries zijn. Voor php kun je nog proberen een accelarator te installeren (APC, eaccelerator, zend accelerator). Dat helpt ook best wel.

Voor Mysql kijk vooral naar:
- indexen leg ze goed aan, mysql kan in een query maar 1 index gebruiken!
- vermijd count(*) met een where clause zoveel mogelijk
- herschrijf queries met een OR zoveel mogelijk naar UNIONS.
- gebruik explain voor je queries (dan kun je zien waar de bottleneck zit).
- gebruik de query cache http://dev.mysql.com/doc/refman/5.0/en/query-cache.html
- kijk goed naar je database instellingen

Andere tips:
- ga bepaalde content of zware queries cachen

1 voorbeeld: wij draaien Jijbent.nl op 3 servers:
- Database Dual machine (40.000 queries per minuut!!)
- PHP/Apache Dual machine www
- PHP/Apache machine voor forum en voor images.

crazycoder
15/03/06, 19:29
Uhm goeie vraag, ik denk de Mysql maar is daar een maniertje voor om achter te komen?

(Ik ben namelijk nieuw op dit gebied.)
Zoals Wido al zei, door in SSH top in te kloppen.

Als je ineens 1 of meerder keren mysqld naar boven zie schieten en een grote hoeveelheid CPU eet (httpd zal dan ook af en toe veel consumeren), dan is het niet onredelijk te veronderstellen dat o.a. indexeren een oplossing zal kunnen bieden.
In combinatie met optimaliseren van queries zal het waarschijnlijk je probleem oplossen.

Bkm
15/03/06, 19:55
Bedankt voor alle reacties, zeer bruikbaar!

Ik heb ff top ingetikt en Mysql stond de hele tijd bovenaan dus neem aan dat het daar door komt.

De game is inderdaard gebasseerd op een criminals maar dat die veel load had wist ik al en er is dus ook al veel aan optimalisatie gedaan (zoals * in query's wegwerken)

@XBL
bedankt voor die LIMIT 1 die ga ik er meteen in bouwen

@bram12
ook bedankt voor jou tips die zal ik ook allemaal even goed nalopen en toepassen als dat nog niet gebeurt is

XBL
15/03/06, 20:09
@XBL
bedankt voor die LIMIT 1 die ga ik er meteen in bouwenDit is een voorbeeld van het optimaliseren (een van de makkelijkere manieren). Daarnaast zijn er nog zat meer trucjes waardoor queries gezonder worden, hier (link) (http://www.sity.nl/?show=support-faq&action=view&id=83) is een pagina die ik regelmatig aan wat mensen heb doorgeven die criminals gebruiken met nog meer query-optimalisaties (allemaal redelijk simpel).

Jochem

wonko
16/03/06, 13:40
De eerste optimalisatie zal gebeuren door gewoon indexen toe te voegen. Zie het "explain" commando, en het "create index" commando in mysql (google ernaar). Zet je logging tijdelijk aan en kijk welke queries populair zijn, en veel tijd nemen (show full processlist kan ook helpen). Optimaliseer eerst de veelvoorkomende en de trage/grote queries... Dat zal al een wereld van verschil maken.

Quick guide:
1) Open mysql console op moment van load, en tik "show full processlist" in. Zoek veelvoorkomende queries op queries met een hoge "time" waarde (die dus lang duren).
2) Neem deze select query, en zet er een explain voor, en voer uit.
3) Kijk welke indexen gebruikt worden, en indien geen of verkeerde, creeer de juiste index
4) verifieer terug met explain select...

Bkm
16/03/06, 16:10
De eerste optimalisatie zal gebeuren door gewoon indexen toe te voegen. Zie het "explain" commando, en het "create index" commando in mysql (google ernaar). Zet je logging tijdelijk aan en kijk welke queries populair zijn, en veel tijd nemen (show full processlist kan ook helpen). Optimaliseer eerst de veelvoorkomende en de trage/grote queries... Dat zal al een wereld van verschil maken.

Quick guide:
1) Open mysql console op moment van load, en tik "show full processlist" in. Zoek veelvoorkomende queries op queries met een hoge "time" waarde (die dus lang duren).
2) Neem deze select query, en zet er een explain voor, en voer uit.
3) Kijk welke indexen gebruikt worden, en indien geen of verkeerde, creeer de juiste index
4) verifieer terug met explain select...

Dat show processlist heb ik even gedaan en nu zie ik veel grote Time waardes, maar daar staat dan achter bij info NULL dus geen query.
Moet ik ook op die van NULL letten of daar niks mee doen?

En kan je ook iets gebruiken van ORDER BY Time DESC ?

wonko
16/03/06, 17:35
die null waarden komen doordat je pconnect gebruikt ipv connect. Die order kan je niet aanpassen voor zover ik weet...