Tuning ASP.NET
Voilà, je sors en fait d'une période de tests de montée en charge sur une plate-forme distribuée avec Web Services, services NT multi-thread, BizTalk et toute la mécanique qui va bien ... Ma plus grande surprise a été de constater les effets du tuning sur les paramètres d'exécution d'ASP.NET.
Lors des tests, nous avons constaté des erreurs au niveau de BizTalk lors de consommation de Web Service dans les orchestrations :
System.InvalidOperationException - There were not enough free threads in the ThreadPool object to complete the operation.
Ce résultat était obtenu à partir d'une configuration par défaut du Framework .Net permettant d'établir un premier test de référence. Nous avons donc appliqué des optimisations sur les options de configuration ASP.NET contenues dans le fichier "machine.config". Les données suivantes sont évaluées pour un serveur bi-processeurs.
Dans "connectionManagement" :
- MaxConnection : 24 (2 par défaut)
Dans "processModel" :
-
MaxIoThreads : 100 (20 par défaut)
-
MaxWorkerThreads : 100 (20 par défaut)
-
minWorkerThreads : 50 (1 par défaut)
-
minIoThreads : 25 (1 par défaut)
Dans "httpRuntime" : Pour les paramètres concernant le nombre minimum de threads libre, aucune règle n'existe précisément et il faut donc affiner en fonction de la volumétrie des flux Http
Les règles de calcul permettant d'aboutir à ce paramétrage et toutes les infos nécessaires : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenetchapt17.asp
Le premier constat est la différence entre les valeurs par défaut et celles recommandées par Microsoft !
Nous avons rejoué les tests, et là c'est carémment bluffant ! Pour traiter l'ensemble des flux émis, la paramétrage à permis de passer de plus de 10h de traitements à moins d'1h !
Autre constat, ces optimisations ont certes permis d’améliorer les temps de traitements en parallèles mais ont aussi et surtout permis de diminuer la charge CPU engendrée sur les serveurs et surtout au niveau de BizTalk (-40 %) lors des traitements effectués en simultanés car lui aussi expose des Web Services et se retrouve donc client et serveur.
Bref, tout ça pour dire qu'il est donc intéressant de se pencher sur l'optimisation des applications et du Framework .Net avant de courir s'acheter un nouveau serveur ...
*** Billet importé de l'ancien blog. ***
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :