2010-11-27 47 views
1

Nous avons une application web basée sur asp.net 1.1. Nous l'avons déployé sur un serveur Web mais il y a un problème à ce sujet. Dans le serveur Web, l'utilisation du processeur augmente parfois jusqu'à 100% et une exception hors mémoire se produit.Utilisation de Cpu et OutOfMemory Exception

Je pense qu'il ya des mauvais code à l'intérieur du projet, mais je ne sais pas où il est.

Maintenant, je veux entendre vos conseils sur la façon de trouver problème et quel genre de codes font usage de cpu a augmenté.

+1

Êtes-vous sérieux avec cette question? Il y a exactement des cas infinis possibles pour une utilisation accrue du processeur. Donc à votre place je commencerais par décrire exactement ce que cette application est en train de faire, comment elle est codée, ... Bien sûr, plus vous fournissez de détails, plus il est probable que vous obtiendrez de bonnes réponses. –

+0

Peut-être avez-vous raison. Mais il y a quelque chose d'intéressant que j'ai vu dans le serveur. Avant que le système ne lève l'exception de MOO, l'utilisation de l'UC est devenue 100%, un journal des événements avec l'ID 1078 s'est produit dans la vue des événements et w3wp.exe utilise une mémoire de 1200 Ko. – mavera

+0

@mavera, cela n'aide pas du tout. Que faisait l'application lorsque vous avez vu l'utilisation accrue du processeur? Accéder à une base de données, analyser un fichier XML, calculer PI avec une précision infinie, lancer des missiles, ...? –

Répondre

0

il semble que le garbage collector ne fait pas son travail comme on le suppose pour une raison quelconque. Je suggère de regarder dans le code où vous avez des déclarations de variables à l'intérieur de longues boucles. par exemple, vous devez vérifier les boucles qui ressemblent à ceci:

dim c as car 
for i as integer = 0 to 20 
    c= new car 
    c.brand="" 
Next 

la boucle au-dessus crée beaucoup de déchets alors assurez-vous d'appeler dispose() lorsque vous avez fini d'utiliser un objet.

une autre question pour vérifier est récursivité. Si vous avez des appels récursifs, assurez-vous de vérifier que la condition de rupture est correcte et assurez-vous d'appeler dispose() aussi avant de sauter dans la récursion suivante.

+0

Si vous avez voté négativement, veuillez expliquer pourquoi vous n'êtes pas d'accord? –

+0

Je suis désolé de dire que cette réponse n'est en aucun cas utile. Les exceptions d'insuffisance de mémoire n'indiquent pas nécessairement que le CPG ne fonctionne pas et la recherche d'appels récursifs est une perte de temps. Plutôt que de faire des suppositions, la première chose à faire est de profiler l'erreur. –

+0

Je n'ai pas dit que GC ne fonctionnait pas, j'ai dit que cela ne fonctionnait pas comme il se doit en raison d'une mauvaise pratique de programmation qui est susceptible d'être la cause de l'erreur. et c'est la première chose à regarder dans le code qui pourrait sauver beaucoup de temps à faire le profilage. –

-1

Si vous ne savez pas comment déboguer quelque chose une fois qu'il est déployé, le premier endroit où vous devriez chercher à apprendre est Tess Ferrandez's blog. Cliquez et lisez. Beaucoup. :) Puis-je vous suggérer de commencer par le debugging labs.