Résolution des problèmes d’utilisation élevée du processeur dans un pool d’applications IIS

S’applique à : Internet Information Services

Cet utilitaire de résolution des problèmes vous aidera à identifier la cause d’un 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 à mesure qu’une application web traite les requêtes. Toutefois, si vous constatez systématiquement que le processeur reste à un niveau élevé (dans la zone de 80 % ou plus) pendant des périodes prolongées, les performances de votre application en pâtiront. Pour cette raison, il est important de comprendre la cause d’un 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 de 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 grimpe à un pourcentage élevé et reste. Pour récupérer, le pool d’applications doit être redémarré, mais après cela, le processeur passe à nouveau à un niveau élevé.

Outils

Collecte de données

La première chose à faire lorsque vous rencontrez des problèmes d’utilisation élevée du processeur consiste à déterminer le processus qui consomme le processeur. Pour ce faire, vous pouvez utiliser l’onglet Processus dans le Gestionnaire des tâches. Veillez à cocher Afficher les processus de tous les utilisateurs . L’image suivante montre cette case cochée et montre le w3wp.exe processus (le processus qui héberge un pool d’applications IIS) qui consomme un niveau élevé de processeur.

Capture d’écran montrant le Gestionnaire des tâches Windows. Sous la colonne CP U, 85 est mis en surbrillance sur la ligne exécutable w 3 w p. L’option Afficher les processus de tous les utilisateurs est sélectionnée.

Vous pouvez également utiliser Analyseur de performances pour déterminer le processus qui 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 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 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 w3wp.exe rencontre un processeur élevé, vous devez collecter les informations suivantes afin de déterminer la cause du problème :

  • Jeu de collecteurs de données Analyseur de performances.
  • Image mémoire en mode utilisateur du processus de w3wp.exe.

Ces deux éléments devront être collectés pendant l’événement de processeur élevé.

Collecte d’un jeu de collecteurs de données Analyseur de performances

Analyseur de performances données sont souvent essentielles pour déterminer la cause des problèmes de processeur élevés. Il peut également être extrêmement utile pour obtenir une vue d’ensemble de la façon dont votre application fonctionne.

Les données Perfmon peuvent être affichées en temps réel ou collectées dans un jeu de collecteurs de données qui peut être examiné ultérieurement. Pour résoudre un problème de processeur élevé, nous devons collecter un ensemble de collecteurs de données. Pour créer un ensemble de collecteurs de données pour la résolution des problèmes liés au processeur élevé, procédez comme suit.

  1. Ouvrez Outils d’administration à partir du Panneau de configuration Windows.
  2. Double-cliquez sur Analyseur de performances.
  3. Développez le nœud Ensembles de collecteurs de données .
  4. Cliquez avec le bouton droit sur Défini par l’utilisateur et sélectionnez Nouveau ->Ensemble de collecteurs de données.
  5. Entrez Processeur élevé comme nom du jeu de collecteurs de données.
  6. Sélectionnez Créer manuellement (avancé) .
  7. Sélectionnez Suivant.
  8. Sélectionnez Créer des journaux de données.
  9. Cochez la case Compteur de performances .
  10. Sélectionnez Suivant.
  11. Sélectionnez Ajouter. Si votre application n’est pas une application ASP.NET, passez à l’étape 19.
  12. Faites défiler jusqu’en haut de la liste des compteurs et sélectionnez Mémoire CLR .NET.
  13. Dans la liste des instances, sélectionnez <toutes les instances>.
  14. Sélectionnez Ajouter pour ajouter les compteurs à la liste des compteurs ajoutés.
  15. Sélectionnez ASP.NET dans la liste des compteurs, puis sélectionnez Ajouter.
  16. Sélectionnez ASP.NET Applications dans la liste des compteurs.
  17. Sélectionnez <toutes les instances> dans la liste des instances.
  18. Sélectionnez Ajouter.
  19. Développez Processus dans la liste des compteurs. (Veillez à développer Processus et non Processeur.)
  20. Sélectionnez % de temps processeur dans l’objet Process .
  21. Sélectionnez <toutes les instances> dans la liste des instances.
  22. Sélectionnez Ajouter.
  23. Développez Thread dans la liste des compteurs.
  24. Sélectionnez % de temps processeur dans l’objet Thread .
  25. Sélectionnez <toutes les instances> dans la liste des instances.
  26. Sélectionnez Ajouter.
  27. Sélectionnez ID Thread dans la liste des instances.
  28. Sélectionnez Ajouter.

Votre boîte de dialogue doit maintenant ressembler à l’image suivante.

Capture d’écran montrant la boîte de dialogue Propriétés de collecte de données 0 1. Le thread ID est sélectionné sous l’onglet Compteurs de performances.

Sélectionnez OK ->Suivant. Notez l’emplacement d’enregistrement du jeu de collecteurs de données. (Vous pouvez modifier cet emplacement si nécessaire.) Sélectionnez ensuite Terminer.

Le jeu 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 de diagnostic de débogage

Le moyen le plus simple de collecter les vidages de processus en mode utilisateur lorsqu’une condition de 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 dans 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 :

  1. Sélectionnez Performances ->Suivant.
  2. Sélectionnez Compteurs de performances ->Suivant.
  3. Sélectionnez Ajouter des déclencheurs de performances.
  4. Développez l’objet Processeur (et non le processus) et sélectionnez % de temps processeur. Notez que si vous utilisez 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 .
  5. Dans la liste des instances, sélectionnez _Total.
  6. Sélectionnez Ajouter ->OK.
  7. Sélectionnez le déclencheur qui vient d’être ajouté, puis sélectionnez Modifier les seuils. Capture d’écran montrant la boîte de dialogue Sélectionner les compteurs de performances.
  8. Sélectionnez Ci-dessus dans la liste déroulante.
  9. Définissez le seuil sur 80.
  10. 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’éviter les faux déclencheurs.)
  11. Sélectionnez OK.
  12. Sélectionnez Suivant.
  13. Sélectionnez Ajouter une cible de vidage.
  14. Sélectionnez Pool d’applications web dans la liste déroulante.
  15. Sélectionnez votre pool d’applications dans la liste des pools d’applications.
  16. Sélectionnez OK.
  17. Sélectionnez Suivant.
  18. Sélectionnez à nouveau Suivant .
  19. Entrez un nom pour votre règle si vous le souhaitez et notez l’emplacement où les vidages seront enregistrés. Vous pouvez modifier cet emplacement si vous le souhaitez.
  20. Sélectionnez Suivant.
  21. Sélectionnez Activer la règle maintenant, puis Terminer.

Conseil

Vous pouvez créer des vidages de plusieurs pools d’applications en ajoutant plusieurs cibles de vidage à l’aide de la même technique que celle utilisée aux étapes 13 à 15.

Cette règle crée 11 fichiers de vidage. Les 10 premiers seront des « mini dumps » qui seront de taille assez petite. Le vidage final sera un vidage avec une mémoire complète, et les vidages seront beaucoup plus volumineux.

Une fois que le problème de processeur élevé s’est produit, vous pouvez arrêter le jeu de collecteurs de données Perfmon de collecter les données. Pour ce faire, cliquez avec le bouton droit sur le jeu de collecteurs de données de processeur élevé répertorié sous le nœud Défini par l’utilisateur , puis sélectionnez Arrêter.

Analyse de données

Après l’événement de processeur élevé, vous aurez deux jeux de données à examiner . le jeu de collecteurs de données Perfmon et les vidages 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 de 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 , puis sélectionnez Dernier rapport. Vous verrez un rapport similaire à la capture d’écran suivante.

Capture d’écran montrant la fenêtre Analyseur de performances.

La première chose à faire consiste à supprimer tous les compteurs actuels afin de pouvoir ajouter des compteurs explicites que vous souhaitez examiner. Sélectionnez le premier compteur de la liste. Faites ensuite défiler vers le bas de la liste et sélectionnez sur le dernier compteur tout en maintenant la touche Maj enfoncée. Une fois que vous avez sélectionné tous les compteurs, appuyez sur La touche Suppr pour les supprimer.

À présent, ajoutez le compteur Process / % Processor Time en procédant comme suit :

  1. Cliquez avec le bouton droit n’importe où dans le volet droit de Perfmon, puis sélectionnez Ajouter des compteurs.
  2. Développez l’objet Process .
  3. Sélectionnez % de temps processeur dans la liste.
  4. Sélectionnez <toutes les instances> dans la liste instance.
  5. Sélectionnez Ajouter.
  6. Sélectionnez OK.

Vous disposez maintenant d’un affichage qui affiche un graphique du temps processeur utilisé par chaque processus sur l’ordinateur pendant l’exécution du jeu de collecteurs de données. Le moyen le plus simple d’isoler le processus qui utilisait 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 de 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 de votre clavier pour parcourir la liste des processus jusqu’à ce que vous trouviez le processus qui affiche le plus d’utilisation du processeur. Dans la capture d’écran suivante, vous pouvez clairement voir que le processus w3wp.exe utilisait une grande quantité de processeur sur l’ordinateur. Cela confirme que le pool d’applications IIS provoque une utilisation élevée du processeur sur l’ordinateur.

Capture d’écran montrant la fenêtre Analyseur de performances. Perfmon montre l’utilisation de l’exécutable w 3 w p.

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 indiquer le nombre de requêtes en cours d’exécution (à l’aide des objets ASP.NET et ASP.NET Applications) et peuvent également vous montrer d’autres données de performances importantes sur les performances de votre application.

Pour accéder à la racine de ce qui est à l’origine du problème de processeur élevé, examinons les vidages qui ont été créés à l’aide de DebugDiag.

Analyse de vidage avec DebugDiag

DebugDiag a la possibilité de reconnaître de nombreux problèmes en effectuant une analyse de vidage 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

  1. Sélectionnez l’onglet Analyse avancée dans DéboguerDiag.
  2. Sélectionnez analyseurs de performances.
  3. Sélectionnez Ajouter des fichiers de données.
  4. Accédez à l’emplacement où les vidages ont été créés. Par défaut, il s’agit d’un sous-dossier du dossier C :\Program Files\DebugDiag\Logs .
  5. Sélectionnez l’un des vidages, puis appuyez sur Ctrl + A pour sélectionner tous les vidages dans ce dossier.
  6. Sélectionnez Ouvrir.
  7. Sélectionnez Démarrer l’analyse.

DebugDiag prend quelques minutes pour analyser les vidages et fournir une analyse. Une fois l’analyse terminée, vous voyez une page similaire à celle illustrée dans l’image suivante.

Capture d’écran montrant Explorer Internet. La page Du rapport d’analyse Diag de débogage s’affiche.

Notez que le haut du rapport indique qu’une utilisation élevée du processeur a été détectée. Dans la colonne de droite, vous verrez des recommandations qui incluent un lien vers les 7 principaux threads par temps processeur moyen. Sélectionnez ce lien et vous verrez des informations sur ce que ces principaux consommateurs d’UC faisaient. Par exemple, la capture d’écran suivante montre ce que ces threads font dans mon application.

Capture d’écran montrant la page Functions Stats dans un navigateur.

Dans cet exemple, la page default.aspx de l’application FastApp est en cours d’exécution. Si vous examinez plus bas la pile des appels (en bas de la page), vous pouvez voir que ce thread effectue la concaténation de chaînes. (Notez l’appel à System.String.Concat sur la pile des appels.) Si vous analysez les autres principaux threads du processeur, 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. Lorsque je fais cela, je trouve 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 élevée du processeur.

Conclusion

En utilisant Perfmon et DebugDiag, vous pouvez facilement collecter des données qui peuvent être utiles pour déterminer la cause de l’utilisation élevée du processeur 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. Les ingénieurs du support technique Microsoft peuvent vous aider à déterminer la cause de votre problème. En mettant les données et les vidages Perfmon prêts lorsque vous ouvrez un cas, vous réduisez considérablement le temps nécessaire aux ingénieurs pour vous aider.

Autres ressources