Résolution des problèmes de processeur élevé dans un pool d’applications IIS
S’applique à : Internet Information Services
Cet utilitaire de résolution des problèmes vous aidera à identifier la cause du processeur élevé soutenu dans un pool d’applications Iis (Internet Information Services). Il est important de garder à l’esprit qu’il est normal que l’utilisation du processeur augmente alors qu’une application web répond à des demandes. Toutefois, si vous constatez constamment que le processeur reste à un niveau élevé (autour de 80 % ou supérieur) pendant des périodes prolongées, les performances de votre application souffriront. Pour cette raison, il est important de comprendre la cause du processeur élevé soutenu afin qu’elle puisse être traitée et corrigée si possible.
Scénario
Un pool d’applications dans IIS connaît une période prolongée d’utilisation élevée du processeur élevé qui dépasse 90 %. Lorsque l’application est testée, aucun problème n’est rencontré. Toutefois, une fois que l’application subit une charge utilisateur réelle, le processeur passe à un pourcentage élevé et reste. Pour récupérer, le pool d’applications doit être redémarré, mais après cela, l’utilisation du processeur atteint de nouveau à un niveau élevé.
Outils
- Diagnostics de débogage (DebugDiag)
- Analyseur de performances (Perfmon)
Collecte de données
La première chose que vous devez faire lorsque vous rencontrez des problèmes élevés d’utilisation du processeur consiste à déterminer le processus qui consomme le processeur. Vous pouvez utiliser l’onglet Processus dans le Gestionnaire des tâches pour effectuer cette opération. Vérifiez que vous cochez la case Afficher les processus à partir de tous les utilisateurs . L’image suivante montre cette case cochée et montre le w3wp.exe
processus (processus qui héberge un pool d’applications IIS) qui consomme un niveau élevé d’UC.
Vous pouvez également utiliser l’Analyseur de performances pour déterminer quel processus utilise le processeur. Pour plus d’informations sur l’utilisation de Analyseur de performances, consultez Analyse des données de performances.
Conseil
Si vous devez identifier le pool d’applications associé à un processus de w3wp.exe particulier, ouvrez une invite de commandes d’administration, basculez dans le %windir%\System32\inetsrv
dossier cd %windir%\System32\inetsrv
et exécutez appcmd list wp
. Cela affiche l’identificateur de processus (PID) du processus de w3wp.exe entre guillemets. Vous pouvez faire correspondre ce PID avec le PID disponible dans le Gestionnaire des tâches.
Une fois que vous avez confirmé qu’un processus de w3wp.exe rencontre un processeur élevé, vous devez collecter les informations suivantes pour déterminer ce qui provoque le problème :
- Un ensemble de collecteurs de données de l’Analyseur de performances.
- Une sauvegarde de la mémoire en mode utilisateur du processus de w3wp.exe.
Ces deux éléments devront être collectés pendant l’événement d’utilisation élevée du processeur.
Collecte d’un jeu de collecteurs de données Analyseur de performances
Analyseur de performances données est souvent essentielle pour déterminer la cause de problèmes élevés de processeur. Il peut également être extrêmement utile d’obtenir une vue d’ensemble de la façon dont votre application fonctionne.
Les données de Perfmon peuvent être affichées en temps réel ou récoltées dans un ensemble de collecteurs de données qui peut être examiné ultérieurement. Pour résoudre un problème d’utilisation élevée du processeur, nous devons récolter un ensemble de collecteurs de données. Pour créer un ensemble de collecteurs de données pour résoudre les problèmes d’utilisation élevée du processeur, procédez comme suit.
- Dans le Panneau de configuration Windows, ouvrez Outils d’administration.
- Double-cliquez sur Analyseur de performances.
- Développez le nœud Jeux de collecteurs de données.
- Cliquez avec le bouton droit sur Défini par l’utilisateur et sélectionnez Nouveau ->Jeu de collecteurs de données.
- Entrez le processeur élevé comme nom du jeu de collecteurs de données.
- Sélectionnez Créer manuellement (Avancé).
- Cliquez sur Suivant.
- Sélectionnez Créer des journaux de données.
- Cochez la case Compteur de performances.
- Cliquez sur Suivant.
- Sélectionnez Ajouter. Si votre application n’est pas une application ASP.NET, passez à l’étape 19.
- Faites défiler jusqu’en haut de la liste des compteurs et sélectionnez mémoire CLR .NET.
- Dans la liste des instances, sélectionnez <Toutes les instances>.
- Sélectionnez Ajouter pour ajouter les compteurs à la liste des compteurs ajoutés.
- Sélectionnez ASP.NET dans la liste des compteurs, puis sélectionnez Ajouter.
- Sélectionnez ASP.NET Applications dans la liste des compteurs.
- Sélectionnez <toutes les instances> dans la liste des instances.
- Sélectionnez Ajouter.
- Développez Processus à partir de la liste des compteurs. (Vérifiez que vous développez Traiter et non traiter.)
- Sélectionnez % temps processeur à partir de l’objet Process .
- Sélectionnez <toutes les instances> dans la liste des instances.
- Sélectionnez Ajouter.
- Développez Thread à partir de la liste des compteurs.
- Sélectionnez % temps processeur à partir de l’objet Thread .
- Sélectionnez <toutes les instances> dans la liste des instances.
- Sélectionnez Ajouter.
- Sélectionnez Thread d’ID dans la liste des instances.
- Sélectionnez Ajouter.
Votre boîte de dialogue doit maintenant ressembler à l’image suivante.
Sélectionnez OK ->Suivant. Notez l’emplacement d’enregistrement de l’ensemble de collecteurs de données. (Vous pouvez modifier cet emplacement si nécessaire.) Sélectionnez Terminer.
L’ensemble de collecteurs de données n’est pas encore en cours d’exécution. Pour le démarrer, cliquez avec le bouton droit sur Processeur élevé sous le nœud Défini par l’utilisateur, puis sélectionnez Démarrer dans le menu.
Création d’une règle Debug Diagnostics
Le moyen le plus simple de collecter les vidages de processus en mode utilisateur lorsqu’une condition processeur élevée se produit consiste à utiliser les diagnostics de débogage.
Téléchargez DebugDiag, installez-le sur votre serveur et exécutez-le. (Vous le trouverez sur le Menu Démarrer après l’installation.) Lorsque vous exécutez DebugDiag, la boîte de dialogue Sélectionner le type de règle s’affiche. Procédez comme suit pour créer une règle d’incident pour votre pool d’applications :
- Sélectionnez Performances ->Suivant.
- Sélectionnez Compteurs de performances ->Suivant.
- Sélectionnez Ajouter des déclencheurs Perf.
- Développez l’objet Processeur (et non le processus) et sélectionnez % temps processeur. Notez que si vous êtes sur Windows Server 2008 R2 et que vous avez plus de 64 processeurs, choisissez l’objet Informations sur le processeur au lieu de l’objet Processeur.
- Dans la liste des instances, sélectionnez _Total.
- Sélectionnez Ajouter ->OK.
- Sélectionnez le déclencheur qui vient d’être ajouté, puis sélectionnez Modifier les seuils.
- Sélectionnez Ci-dessus dans la liste déroulante.
- Remplacez le seuil par 80.
- Entrez 20 pour le nombre de secondes. (Vous pouvez ajuster cette valeur si nécessaire, mais veillez à ne pas spécifier un petit nombre de secondes, afin d’empêcher les faux déclencheurs.)
- Cliquez sur OK.
- Sélectionnez Suivant.
- Sélectionnez Ajouter une cible de vidage.
- Sélectionnez Pool d’applications web dans la liste déroulante.
- Sélectionnez votre pool d’applications dans la liste des pools d’applications.
- Cliquez sur OK.
- Sélectionnez Suivant.
- Cliquez à nouveau sur Suivant.
- Donnez un nom à votre règle si vous le souhaitez et notez l’emplacement où les sauvegardes seront enregistrées. Vous pouvez modifier cet emplacement si vous le souhaitez.
- Cliquez sur Suivant.
- Sélectionnez Activer la règle maintenant, puis sélectionnez Terminer.
Conseil
Vous pouvez créer des vidages de plusieurs pools d’applications en ajoutant plusieurs cibles de sauvegarde à l’aide de la même technique utilisée aux étapes 13-15.
Cette règle crée 11 fichiers de sauvegarde. Les 10 premiers seront des « mini-sauvegardes » qui seront assez petits en taille. La sauvegarde finale sera une sauvegarde avec mémoire complète et les sauvegardes seront beaucoup plus volumineuses.
Une fois que le problème de processeur élevé s’est produit, vous devez empêcher l’ensemble de collecteurs de données Perfmon de collecter des données. Pour ce faire, cliquez avec le bouton droit sur le jeu de collecteurs de données processeur élevé répertorié sous le nœud défini par l’utilisateur, puis sélectionnez Arrêter.
Analyse des données
Après l’événement processeur élevé, vous aurez deux ensembles de données à examiner ; l’ensemble de collecteurs de données Perfmon et les sauvegardes de mémoire. Commençons par examiner les données Perfmon.
Analyse des données de performances
Pour passer en revue les données Perfmon pour votre problème, cliquez avec le bouton droit sur le jeu de collecteurs de données processeur élevé répertorié sous le nœud Défini par l’utilisateur et sélectionnez Dernier rapport. Vous verrez un rapport similaire à la capture d’écran suivante.
La première chose est de supprimer tous les compteurs actuels afin que vous puissiez ajouter des compteurs explicites que vous souhaitez examiner. Sélectionnez le premier compteur dans la liste. Faites ensuite défiler jusqu’au bas de la liste et sélectionnez le dernier compteur tout en maintenant la touche Maj enfoncée. Une fois que vous avez sélectionné tous les compteurs, appuyez sur Supprimer pour les supprimer.
Ajoutez maintenant le compteur de temps processeur Process / % en procédant comme suit :
- Cliquez avec le bouton droit n’importe où dans le volet droit de Perfmon, puis sélectionnez Ajouter des compteurs.
- Développez l’objet Process .
- Sélectionnez % temps processeur dans la liste.
- Sélectionnez toutes les instances dans la liste des instances>.<
- Sélectionnez Ajouter.
- Cliquez sur OK.
Vous disposez maintenant de l’affichage d’un graphique du temps de processeur utilisé par chaque processus sur l’ordinateur pendant que l’ensemble de collecteurs de données était en cours d’exécution. Le moyen le plus simple d’isoler le processus utilisant le niveau de processeur le plus élevé consiste à activer la fonctionnalité de mise en surbrillance de Perfmon.
Pour ce faire, sélectionnez le premier compteur dans la liste, puis appuyez sur Ctrl+ H. Une fois cette opération effectuée, le processus sélectionné s’affiche sous la forme d’une ligne noire en gras sur le graphique.
Utilisez la flèche vers le bas sur votre clavier pour descendre dans la liste des processus jusqu’à ce que vous trouviez le processus qui affiche la plus grande utilisation du processeur. Dans la capture d’écran suivante, vous pouvez clairement voir que le processus w3wp.exe utilisait une grande quantité d’UC sur l’ordinateur. Cela confirme que le pool d’applications IIS provoque une utilisation élevée du processeur sur l’ordinateur.
Conseil
Perfmon peut être très utile pour déterminer les problèmes de performances dans votre application. Les données collectées dans le journal Perfmon peuvent vous montrer le nombre de requêtes en cours d’exécution (à l’aide des objets ASP.NET et Applications ASP.NET) et peuvent également afficher d’autres données importantes sur les performances de votre application.
Pour accéder à la cause du problème de processeur élevé, examinons les sauvegardes qui ont été créées à l’aide de DebugDiag.
Analyse de vidage avec DebugDiag
DebugDiag est en mesure de reconnaître de nombreux problèmes en effectuant une analyse de sauvegarde automatisée. Pour ce problème particulier, les analyseurs de performances de DebugDiag sont bien adaptés pour aider à identifier la cause racine du problème de processeur élevé. Pour utiliser l’analyseur, procédez comme suit
- Sélectionnez l’onglet Analyse avancée dans DebugDiag.
- Sélectionnez les Analyseur de performances.
- Sélectionnez Ajouter des fichiers de données.
- Rendez-vous à l’emplacement où les sauvegardes ont été créées. Par défaut, il s’agit d’un sous-dossier du dossier C :\Program Files\DebugDiag\Logs .
- Sélectionnez l’un des vidages, puis appuyez sur Ctrl + A pour sélectionner tous les vidages dans ce dossier.
- Sélectionnez Ouvrir.
- Sélectionnez Démarrer l’analyse.
DebugDiag prend quelques minutes pour analyser les vidages et fournir une analyse. Une fois l’analyse terminée, une page semblable à celle illustrée dans l’image suivante s’affiche.
Notez que le haut du rapport indique que le processeur élevé a été détecté. Dans la colonne de droite, vous verrez des recommandations qui incluent un lien vers les 7 principaux threads par temps de processeur moyen. Sélectionnez ce lien et vous verrez des informations sur ce que les principaux consommateurs d’UC faisaient. Par exemple, la capture d’écran suivante montre ce que font ces threads dans mon application.
Dans cet exemple, la page default.aspx de l’application FastApp est en cours d’exécution. Si vous regardez plus loin dans la pile des appels (en bas de la page), vous pouvez voir que ce thread effectue une concaténation de chaînes. (Notez l’appel à System.String.Concat
la pile des appels.) Si vous analysez les autres threads de processeur principaux, vous voyez le même modèle.
L’étape suivante consiste à passer en revue l’événement Page_Load
dans la page default.aspx de l’application FastApp. Lors de cette étape, j’obtiens le code suivant.
htmlTable += "<table>";
for (int x = 0; x < 5000; x++)
{
htmlTable += "<tr>" + "<td>" + "Cell A" + x.ToString() + "</td>";
htmlTable += "<td>" + "Cell B" + x.ToString() + "</td>" + "</tr>";
}
htmlTable += "</table>";
Ce type de code provoquera certainement une utilisation de processeur élevée.
Conclusion
En utilisant Perfmon et DebugDiag, vous pouvez facilement collecter des données qui peuvent être utiles pour déterminer la cause de la fuite de mémoire dans les pools d’applications. Si vous ne parvenez pas à trouver la cause racine à l’aide de ces techniques, vous pouvez contacter le support Microsoft pour obtenir de l’aide supplémentaire. Les ingénieurs du support technique Microsoft peuvent vous aider à déterminer la cause de votre problème. En ayant les données perfmon et les vidages prêts lorsque vous ouvrez un cas, vous réduisez considérablement le temps nécessaire aux ingénieurs pour vous aider.