Configuration et analyse des évènements de recyclage IIS 6 & 7


Introduction


IIS permet de recycler les processus hébergeant les applications exécutées par le serveur web (processus W3WP.EXE). Par défaut si un processus IIS est toujours actif, il sera recyclé après 1740 minutes (29h) d’activité. Ce paramétrage se trouve au niveau des propriétés avancées du pool d’application. Dans le cas d’IIS7, le paramétrage se présente comme suit :




Comme nous pouvons le constater, les critères de recyclages peuvent être variés (intervalle de temps, mémoire, nombre de requêtes…). Lorsqu’un recyclage survient, IIS génèrera par défaut une entrée dans le journal d’évènement système Windows sur un certain type d’évènement.


Exemple de paramétrage par défaut IIS7 :





Note : cette propriété n’est pas accessible depuis l’interface d’administration d’IIS6 mais il est possible d’obtenir une fonctionnalité équivalente en positionnant certaines propriétés de la métabase par le script “adsutil.vbs”.


Comme nous pouvons le constater, il est possible de configurer IIS pour générer des informations sur de très nombreux évènements de recyclage. Dans IIS6, ce comportement peut-être paramétré à l’aide de la propriété suivante de la métabase : LogEventOnRecycle et dans IIS7 à l’aide de la section : system.applicationHost/applicationPools -applicationPoolDefaults.recycling.logEventOnRecycle.


Comment paramétrer IIS pour générer un message lors de tout recyclage


Avant de réaliser toute modification de configuration, nous recommandons de réaliser une sauvegarde de cette dernière ce qui vous permettra de faire, au besoin, un retour arrière. Pour sauvegarder votre configuration, utiliser les commandes suivantes selon votre version d’IIS :














IIS6


IIS7


Cd c:\inetpub\adminscripts



  • Pour lister les sauvegardes réalisées :

cscript iisback.vbs /list



  • Pour réaliser une sauvegarde :

cscript iisback.vbs /backup /b sauvegadeAvantModification


Cd C:\Windows\System32\inetsrv



  • Pour lister les sauvegardes réalisées :

appcmd list backup



  • Pour réaliser une sauvegarde :

appcmd add backup sauvegadeAvantModification


Pour générer un message lors de tout recyclage, utiliser les commandes suivantes selon votre version d’IIS :














IIS6


IIS7


Cd c:\inetpub\adminscripts



  • Pour récupérer la valeur configurée (par défaut 137) :

cscript adsutil.vbs GET W3SVC/AppPools/LogEventOnRecycle



  • Pour tracer tous les évènements de recyclage :

cscript adsutil.vbs SET W3SVC/AppPools/LogEventOnRecycle 255


Cd C:\Windows\System32\inetsrv



  • Pour récupérer la valeur configurée (par défaut 137) :

appcmd list CONFIG -section:system.applicationHost/applicationPools



  • Pour tracer tous les évènements de recyclage :

appcmd set CONFIG -section:system.applicationHost/applicationPools -applicationPoolDefaults.recycling.logEventOnRecycle:Time,Requests,Schedule,Memory,IsapiUnhealthy,OnDemand,ConfigChange,PrivateMemory


Si vous souhaitez que seuls certains évènements soient pris en compte sous IIS6, il vous faudra remplacer la valeur 255 par le « bitmask » approprié :


LogEventOnRecycle Configuration























































Recycle Condition


Event ID


Metabase Property


Bitmask


Elapsed time


1074


AppPoolRecycleTime


1 (0x1)


Number of requests processed


1075


AppPoolRecycleRequests


2 (0x2)


Scheduled recycle


1076


AppPoolRecycleSchedule


4 (0x4)


Virtual memory consumed


1077


AppPoolRecycleMemory


8 (0x8)


ISAPI reported itself unhealthy


1078


AppPoolRecycleIsapiUnhealthy


16 (0x10)


Recycled on demand


1079


AppPoolRecycleOnDemand


32 (0x20)


Recycled due to configuration change


1080


AppPoolRecycleConfigChange


64 (0x40)


Private memory consumed


1117


AppPoolRecyclePrivateMemory


128 (0x80)


Avec IIS7 les EventID générés on été incrémentés de 4000 par exemple l’EventID 1009 deviens 5009.


Comment identifier les évènements de recyclage


Il est par la suite simple d’identifier quand et quels sont les évènements qui ont forcé IIS à recycler à l’aide l’outil LogParser : http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en .


Exemple de requête SQL permettant d’identifier ces évènements (requête inspirée de l’article : «Yes, We Recycle!…That Includes AppPools») :


Select top 100 to_string(TimeGenerated, ‘MM/dd/yyyy hh:mm:ss’) as dateTime,
case
EventID
when 1009 then ‘IIS6-UnExpEnd’
when 5009 then ‘IIS7-UnExpEnd’
when 1010 then ‘IIS6-PingFail’
when 5010 then ‘IIS7-PingFail’
when 1011 then ‘IIS6-FatalComErr’
when 5011 then ‘IIS7-FatalComErr’
when 1074 then ‘IIS6-TimeLimit’
when 5074 then ‘IIS7-TimeLimit’
when 1077 then ‘IIS6-VMem’
when 5077 then ‘IIS7-VMem’
when 1078 then ‘IIS6-ISAPIUnHealth’
when 5078 then ‘IIS7-ISAPIUnHealth’
when 1079 then ‘IIS6-Admin’
when 5079 then ‘IIS7-Admin’
when 1080 then ‘IIS6-ConfigChange’
when 5117 then ‘IIS7-PMem’
end as Reason

from \\localhost\System
where SourceName in (‘W3SVC’;’WAS’) and
EventID in (1117;1080;1079;1078;1077;1074;1011;1010;1009;5117;5080;5079;5078;5077;5074;5011;5010;5009) and
TimeGenerated > to_timestamp(‘2008-01-01 00:01:01′,’yyyy-MM-dd hh:mm:ss’)


Conclusion


Il est possible de configurer IIS pour qu’il génère un message lors de tout type de recyclage et d’identifier ces derniers avec l’outil LogParser. Conservez précieusement vos journaux Windows car ils contiennent des informations importantes sur l’état de santé de vos applications !


Julien Clauzel

Comments (0)