Groeipijn bij succesvolle websites

  • Berichtcategorie:Blog

Bij Ingteractive.com werken wij graag met ambitieuze projecten met veel groei potentieel. Sommige van onze concepten groeien langzaam naar succes, andere een stuk sneller en sommige mislukken helaas. Dat is ondernemen. Soms heb je hoge verwachtingen van iets en wordt het niets en soms gaat het juist omgekeerd. Ondertussen hebben we wel een goed begrip gekregen van de succesfactoren en zien we gelukkig steeds minder mislukkingen. Maar met de groei van het aantal bezoekers, transacties en webpagina’s krijgen wij ook te maken met “groeipijntjes”. Sommige websites groeien simpelweg uit hun jasje en dit kan zeer plotseling gebeuren. Welke problemen kan je verwachten? Hoe ga je hiermee om?

Het ontstaan van groeipijn bij websites

Op het moment dat de bezoekersaantallen beginnen te pieken kunnen de eerste problemen ontstaan. Signalen zijn vastlopende websites, webservers en database servers die stoppen te functioneren omdat er te veel geswapt wordt en het einde geheugen vol stroomt. De groepijn onstaat dus door de toename van het aantal bezoekers en het aantal connecties en queries die richting de webserver worden gemaakt. Wanneer deze hier niet op is gedimensioneerd kan dat tot “outage” leiden. Dat wil je niet.

Herken de signalen

Heeft jouw website regelmatig last van onbeschikbaarheid? Dan kan het zeker zo zijn dat je de webserver of het webhosting pakket dat je hebt afgenomen aan het ontgroeien zijn.

Pleister op de wond

Wanneer er teveel connecties worden gemaakt en de webserver uit het geheugen loopt is het van belang een absolute crash te voorkomen. Dit doe je door het aantal connecties naar de webserver (vb. Apache op Ubuntu) te beperken in de Apache2, PHp5 en MySQL configuratie (apache2.conf, php.ini, my.cnf). Er zijn twee manieren om dit probleem te verhelpen. Eerste oplossing is het verhogen van de “connection limit”. De tweede oplossing heeft alles te maken met het ontdekken waarom de “Too many connections” errors onstaan en deze informatie gebruiken om het MySQL gebruik of geheugen gebruikt terug te brengen naar acceptabele proporties.

In de shell kan de MySQL server status worden gevonden met de mysqladmin applicatie. Om het huidige aantal connecties naar de MySQL server te controleren gebruik je :

# mysqladmin -uadmin -p`cat /etc/psa/.psa.shadow` extended-status | grep Max_used_connections
| Max_used_connections | 11 |

De huidige connection limit kan worden gevonden met :

# mysqladmin -uadmin -p`cat /etc/psa/.psa.shadow ` variables | grep 'max.*connections'
| max_connections | 100 |
| max_user_connections | 0

In het bovenstaande voorbeeld is het maximum aantal connections naar de server (max_connections) ingesteld op 100. Het maximum aantal connections per user (max_user_connections) is 0, wat ongelimiteerd betekent. De standaard MySQL waarden kunnen worden geconfigureerd in/etc/my.cnf (/etc/mysql/my.cnf op Debian/Ubuntu). Bijvoorbeeld:

[mysqld]
set-variable=max_connections=150
set-variable=max_user_connections=20

Om de instellingen van toepassing te laten zijn moet MySQL opnieuw worden opgestart:

/etc/init.d/mysqld restart

Pas op: wanneer de connection limit erg hoog is (meer dan 300), dan kan dit invloed hebben op de performance van de server. Het is beter om oorzaak van het probleem te vinden in plaats van symptoom bestreiding te voeren. Het is mogelijk om te achterhalen welke gebruikers / requests langzaam zijn middels het onderstaande commando::

# mysqladmin -uadmin -p`cat /etc/psa/.psa.shadow` processlist
 Naast de MySQL tuning is het ook belangrijk om de Apache connections te beschouwen.

Schaalbare hosting

Kies voor een schaalbare hosting oplossing. Hier zal ik later meer over schrijven.