ASP.NET High CPU apportant les serveurs à genoux


8

Ok, notre nouvelle version a des pics de 100% cpu sur chaque serveur à intervalles aléatoires. Pendant de longues durées, cela rend le site totalement insensible - ce sera aux heures de pointe lorsque des personnes de différents pays se connecteront au site, etc.

Nous avons examiné perfmom, les profileurs de mémoire, le profileur CLR, les profileurs sql, le profileur de fourmis Red Gate, essayé les tests de charge dans UAT - mais nous ne pouvons même pas reproduire le problème. Cela pourrait signifier que seuls des milliers d'utilisateurs frappant le site en direct peuvent le faire.

Un modèle que nous avons remarqué est que le nouveau code - la version cassée - utilise en fait sensiblement moins de threads.

Nous utilisons également le ressort pour le CIO - cela a-t-il une réputation de lit?

Pour aggraver les choses, nous ne pouvons pas déployer pour vivre en raison de l'impact sur l'entreprise - nous ne pouvons donc pas réduire le problème à un sous-ensemble des nouvelles fonctionnalités que nous avons ajoutées.

Nous sommes vraiment détruits - quelqu'un a-t-il des cicatrices de bataille qui pourraient nous sauver quelques vies?


Que rapportent les capteurs de température? Je me demande si votre alimentation ne peut pas suivre. (Aucune idée de comment vérifier cela.)
sarnold

2
Lorsque vous dites que le serveur est arrêté, pouvez-vous ajouter plus de détails, est-ce BSOD? Voulez-vous dire qu'il redémarre ou peut-être un redémarrage de domaine d'application.

Il n'y a aucun moyen qu'un " pic 100% CPU " puisse "faire tomber" le serveur. Il devrait être fixé à 100% pendant assez longtemps, associé à des problèmes de dissipation thermique.
Andrew Barber

1
Qu'est-ce que ça fait?? Quel processus utilise le CPU au sommet? Telle est la question la plus importante.
Aliostad

Mis à jour ma question - est-ce mieux? Merci pour le -1 :)

Réponses:


3

Je suggère de faire des vidages de mémoire et de les analyser dans WinDdg avec Sos. J'ai corrigé quelques problèmes sur notre production que je ne pourrais probablement pas diagnostiquer sans WinDbg.

Tess Fernandez a un excellent blog où vous pouvez apprendre à analyser les vidages de mémoire.


ce blog est une excellente ressource et nous l'avons utilisé. Notre problème est que nous ne pouvons pas recréer le problème à nouveau et obtenir les vidages.

1
Pour recréer le problème, vous pouvez marteler votre système de test avec jmeter ( jmeter.apache.org ) et ab ( httpd.apache.org/docs/2.0/programs/ab.html ). Avec ceux-ci, les multicœurs, un LAN rapide et certains collègues, vous devriez être en mesure de stresser suffisamment le serveur.
Roman

1

Cela est généralement dû à un grand nettoyage des objets à longue durée de vie dans le CPG ( stackoverflow a eu ce problème, voir le lien ). Stockez-vous de nombreuses collections d'objets dans le cache ou la session?

Assaut par GC

Je vous recommande également de créer et de configurer un nouveau serveur en production à tester. Si vous avez une folie aléatoire et ne savez pas pourquoi et ne pouvez pas le reproduire, je pointerais du doigt le matériel ou la configuration, pas le code.


Nous ne pouvons pas mettre de nouveau code en direct car il ajoute des fonctionnalités de nouvelles. Lorsque le code était en ligne, l'utilisation du GC était la même - y compris pour la génération 2. Merci cependant - avez-vous d'autres suggestions?

Ce n'est pas impossible, mais le matériel et la configuration sont presque les mêmes que le dernier déploiement auquel nous sommes revenus et qui fonctionne correctement.

1

S'agit-il d'un serveur virtuel avec des ressources partagées ou d'un serveur physique? Si c'est le premier, vous pourriez peut-être envisager de consacrer des ressources à ce serveur. Bonne chance...


0

Essayez d'utiliser un cache servercomme frontend Apache Traffic Server (ATS).

Bien que cela ne résoudra pas le problème, il peut être utile de l'identifier car vous déplacerez en même temps la charge potentiellement nuisible du backend (voir si le frontend a également des problèmes) et réduirez les choses sur le backend afin qu'il soit plus facile de voir ce qui ne va pas.


0

Essayer de deviner la faute sans les données est inutile. Oui, quelqu'un sur stackoverflow ou dans votre équipe d'ingénieurs pourrait avoir de la chance, mais c'est juste une mauvaise ingénierie, et vous ne pouvez pas planifier le temps qu'il vous faudra pour essayer chaque supposition, et si votre trouverait même le problème.

  1. Vous devez reprocher le problème. Jmeter est un bon début en raison de son ampleur, mais nous ne pouvons pas recommander le bon outil sans connaître notre architecture.
  2. La journalisation spécialement dans votre couche d'application est un must. Vous pouvez activer les traces IIS pour des performances lentes, mais les muppets de Microsoft l'ont fait pour que vous ne puissiez pas capturer l'intégralité du flux de pipeline lorsqu'il est lent. S'il est si difficile à reproduire, vous aimeriez vraiment que certains journaux vous aident à préciser où se situe le problème. (comme oh, c'est chaque fois que nous appelons ce proc stocké).

Le CPU à 100% est un peu suspect dans le sens où il est peu probable qu'il s'agisse d'E / S (à condition que la base de données soit une autre boîte, une base de données lente ne devrait pas provoquer 100% de CPU sur les serveurs Web). Vous devez regarder plus près de chez vous.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.