Op dit moment ben ik nogal veel bezig met analyseren van bestaande webapplicaties op hun performance. Kortom het uit zoeken waarom de webserver regelmatig volledig dichtklapt en waar zich het probleem bevindt (in de source code).
Ik maak zelf onderscheid in 3 zaken: Database Server, General Performance, Coding style
Database Server
Hieronder valt bij mij ook bijvoorbeeld een slecht genormaliseerde database, langzame queries (in stored procedures), verkeerde indexen.
General Performance
Hierbij denk ik dan vooral aan zaken zoals het niet vrijgeven van de gebruikte resources, denk bijvoorbeeld een Sql Connection object. Waardoor als het even tegen zit honderden zoniet duizenden connecties naar de database onnodig open blijven staan. Maar ook het niet disposen of direct op null zetten van objecten die je echt niet meer nodig hebt, zodat de GC ze zo snel mogelijk uit je geheugen kan verwijderen en dus je geheugen over een langere periode onnodig vol blijft.
Coding style
Behalve ontwerp fouten, spaghetticode, verkeerde benamingen, inefficiënte string concatenation, ongeoorloofd gebruik van try-catch, slecht geïmplementeerde eigen geschreven authorisatie-mechanismes (En die van .NET niet of half gebruiken.)
Gebruikte tools (tot nu toe)
Microsoft FxCop
Met behulp van deze applicatie is het mogelijk om allerlei performance, coding style, zaken op te laten zoeken en aan te pakken. Dit programma werkt met zogenaamde rules, het zoekt bijvoorbeeld naar inconsistente naamgeving - niet gebruikte variabelen - verkeerde (algemene) exception's afvangen - globalization toepassen - te pas en te onpas allerlei objecten lopen aanmaken.
Microsoft Application test center
Hiermee heb ik een aantal stress test's uitgevoerd en enkele performance counters gelogd. Hiermee kon ik een x aantal concurrent gebruikers op de website simuleren. Heb hier nog maar even kort naar gekeken.
Ook heb ik gekeken naar, Microsoft CLR Debugger en CLR Profiler. Ik vond het nogal moeilijk om uit de gegevens van vooral de laatstgenoemde bruikbare informatie te halen. Het geeft een heleboel leuke grafieken weer met info over de verschillende objecten.
Nu denk je misschien dat de voorbeelden die ik hierboven heb gegeven wel meevallen, maar als je al die voorbeelden in 1 applicatie tegenkomt... mag je 3x raden wat er gebeurt.
Nu is dit voor mij redelijk nieuw, al helemaal in .NET (webapplicaties). Nu vroeg ik mij af, hoe pakken jullie dit aan? Wat voor methodieken passen jullie toen? Welke tools zijn hiervoor handig?
Ik maak zelf onderscheid in 3 zaken: Database Server, General Performance, Coding style
Database Server
Hieronder valt bij mij ook bijvoorbeeld een slecht genormaliseerde database, langzame queries (in stored procedures), verkeerde indexen.
General Performance
Hierbij denk ik dan vooral aan zaken zoals het niet vrijgeven van de gebruikte resources, denk bijvoorbeeld een Sql Connection object. Waardoor als het even tegen zit honderden zoniet duizenden connecties naar de database onnodig open blijven staan. Maar ook het niet disposen of direct op null zetten van objecten die je echt niet meer nodig hebt, zodat de GC ze zo snel mogelijk uit je geheugen kan verwijderen en dus je geheugen over een langere periode onnodig vol blijft.
Coding style
Behalve ontwerp fouten, spaghetticode, verkeerde benamingen, inefficiënte string concatenation, ongeoorloofd gebruik van try-catch, slecht geïmplementeerde eigen geschreven authorisatie-mechanismes (En die van .NET niet of half gebruiken.)
Gebruikte tools (tot nu toe)
Microsoft FxCop
Met behulp van deze applicatie is het mogelijk om allerlei performance, coding style, zaken op te laten zoeken en aan te pakken. Dit programma werkt met zogenaamde rules, het zoekt bijvoorbeeld naar inconsistente naamgeving - niet gebruikte variabelen - verkeerde (algemene) exception's afvangen - globalization toepassen - te pas en te onpas allerlei objecten lopen aanmaken.
Microsoft Application test center
Hiermee heb ik een aantal stress test's uitgevoerd en enkele performance counters gelogd. Hiermee kon ik een x aantal concurrent gebruikers op de website simuleren. Heb hier nog maar even kort naar gekeken.
Ook heb ik gekeken naar, Microsoft CLR Debugger en CLR Profiler. Ik vond het nogal moeilijk om uit de gegevens van vooral de laatstgenoemde bruikbare informatie te halen. Het geeft een heleboel leuke grafieken weer met info over de verschillende objecten.
Nu denk je misschien dat de voorbeelden die ik hierboven heb gegeven wel meevallen, maar als je al die voorbeelden in 1 applicatie tegenkomt... mag je 3x raden wat er gebeurt.
Nu is dit voor mij redelijk nieuw, al helemaal in .NET (webapplicaties). Nu vroeg ik mij af, hoe pakken jullie dit aan? Wat voor methodieken passen jullie toen? Welke tools zijn hiervoor handig?