web-dev-qa-db-fra.com

Comment identifier la cause de l'utilisation à 100% du processeur dans Azure App Service?

J'ai cinq applications dans un plan Azure App Service, toutes des copies différentes de la même application pour différents clients. Il s'agit d'une application ASP.NET MVC avec une base de données SQL.

Ce matin, je me suis réveillé sur des sites lents et non réactifs, entraînant parfois une erreur 503. En vérifiant les métriques CPU/mémoire pour le plan de service d'application, j'ai découvert que le CPU était fixé à 100%:

CPU at 100%

Et le graphique du temps processeur de chaque site montre qu'ils s'éteignent tous en même temps, bien que certains soient pires que d'autres:

Individual Sites CPU usage

J'ai essayé de résoudre le problème en effectuant un redémarrage avancé de l'application, mais la lame ne se chargeait pas - je suppose parce qu'elle essayait d'obtenir des informations du serveur qui ne pouvaient pas répondre.

À la fin, j'ai essayé d'arrêter chacun des sites un par un, ce qui a ramené le processeur à zéro, puis les redémarrer, ce qui semblait avoir résolu le problème, mais maintenant, certains d'entre eux commencent à remonter.

J'ai rencontré un problème similaire il y a quelques semaines et j'ai supposé que je devenais trop gros pour mon plan d'application, donc je suis passé de S1 à S2 et ça allait bien jusqu'à aujourd'hui.

Je ne sais absolument pas comment déterminer la cause de ce comportement gourmand en processeur. Quelqu'un peut-il m'indiquer dans la bonne direction comment commencer à diagnostiquer cela?

12
littlecharva

Nous avons eu ce problème plusieurs fois et à chaque fois, il s'est avéré que le GC était en cours d'exécution (garbage collection). C'est difficile à prouver et à diagnostiquer, mais ce que je finis par utiliser, c'est le site kudo (scm), en cliquant sur tools => support (qui vous amène au site de support pour les applications.

De là, vous choisissez votre répertoire (au cas où vous en avez plusieurs) et votre site, cliquez sur Analyser => Métriques puis sur le bouton Diagnostiquer ( NOTE cela a déjà changé donc ces les étapes peuvent changer à tout moment), puis de retour sur Analyze => Dianotics, vous obtiendrez finalement un rapport Memory Dump => "Analysis status". Il doit s'agir d'un fichier mht (que vous pouvez ouvrir dans le navigateur haineux IE ou Edge), puis recherchez la clé "gc".

vous trouverez des cadres de pile d'appels intéressants avec des références à des choses comme "GCFrame" ou plus intéressant à "System.Threading.WaitHandle.WaitMultiple" si vous en obtenez trop, votre système pourrait avoir des problèmes avec la récupération de place .

Comment résoudre cela ... c'est un sujet abordé dans de nombreux autres fils de discussion, car c'est comme demander "comment puis-je vivre dans un monde avec IE 6 toujours utilisé?" ...

6
cdmdotnet

Votre meilleur pari serait d'installer New Relic ou Application Insights pour cette application particulière. Il peut être facilement installé via App Service -> Outils -> Surveillance des performances. Cela vous donnera une vue détaillée de ce qui se passe à la fois côté serveur et côté client.

Application Monitoring

Article: Surveiller les performances des applications Web Azure

3
Bruno Faria