ASP.NET -> Memory Exception, introuvable j'en peut plus !

ASP.NET -> Memory Exception, introuvable j'en peut plus ! - C#/.NET managed - Programmation

Marsh Posté le 24-08-2006 à 15:58:00    

Bonjour a vous,
 
Je me trouve face a un soucis que je n'arrive pas à regler.
 
Nous bossons sur des appli web asp.net/c# + sql server des plus classiques.
Nous disposons d'un server pour le web, et d'un serveur pour la BDD
 
Jusqu'ici tout va bien.
 
Tout fonctionnais a merveille, mais de retour de congés, je me retrouve avec le serveur web instable, generant des erreurs "System:OutOfMemoryException" mais je ne sais pas comment detecter la cause de l'erreur.
 
Quelqu'un d'entre vous conaittrais un outil de monitoring ou une technique me permettant de localiser l'origine de la chose ?
 
Merci d'avance  
 
ps : j'ajouterais que niveau hardware le serveur WEB est un BiXeon 3.00Ghz et 2Go de RAM

Reply

Marsh Posté le 24-08-2006 à 15:58:00   

Reply

Marsh Posté le 24-08-2006 à 16:02:42    

phénomère classique : allimentation d'objets "application" ou "session" générés "inproc" et en oubliant de les détruire. rien de tel pour saturer la mémoire.
 
ça ou aussi une belle boucle sans condition de sortie, ça peut rapidement bouffer la mémoire (ceci dit, on a généralement un stack overflow avant)
 
sinon, y'a pas de technique particulière.
 
tu active "debug", et tu regardes où ça pète.
 
si même en debug t'as pas de détail sur le lieu du pétage de plomb, tu fout des logs à l'entrée à la sortie de chaque fonction, et tu affine jusqu'à ce que tu isoles le bloc qui merde.


Message édité par MagicBuzz le 24-08-2006 à 16:04:02
Reply

Marsh Posté le 24-08-2006 à 16:14:01    

A mon avis sa doit venir des sessions mais le soucis est que sur le serveur web j'ai 7 applications qui tourne, donc c'est mission impossible que de foutre des logs dans chacune d'elle.
 
Quel est ma méthode avec le debug ?

Reply

Marsh Posté le 24-08-2006 à 16:16:24    

dans le web.config, tu mets "debug=true" dans la partie <configuration>

Reply

Marsh Posté le 24-08-2006 à 16:17:08    

par contre, vérifierles propriétés de custom error, parceque quand ça va planter ça va afficher le code autour de l'erreur, donc pour peut qu'il y ait des infos sensibles dans ton code et c pas top ;)

Reply

Marsh Posté le 24-08-2006 à 16:22:22    

Sa m'arrange que sa m'affiche le code autour de l'erreur.
 
Mais le truc c'est qu'il est impossible que je tombe au moment pil poil ou sa plante, etant donné que sa plante au hasard parfois au bout de 3heures, parfois au bout de 5heures :(

Reply

Marsh Posté le 24-08-2006 à 16:24:58    

Bah j'etais deja sur debug, et mon customeerror est bien sur remoteonly
 
Mais rien en fait quand mon serveur plante il ne me donne meme pas de quel application viens le probleme :(

Reply

Marsh Posté le 24-08-2006 à 16:32:55    

t'es en local sur le serveur ou pas ?

Reply

Marsh Posté le 24-08-2006 à 16:36:29    

Nan je dev en local (la j'ai aucun probleme) puis j'upload le tout sur un serveur de prod (je me connecte a distance dessus)
 
Et c'est sur ce dernier que y'a soucis.
 
ps : quand j'ai l'erreur outOfMemoryException sur le serveur, je doit faire un iisreset pour que sa rentre dans l'ordre

Reply

Marsh Posté le 24-08-2006 à 16:50:09    

donc, si tu te connectes à distance, c'est normale qu'en mode "remoteonly" tu ne vois pas l'erreur.
essaie de passer à "off" le temps de trouver l'erreur, mais surtout, vérifie que t'as pas de mot de passe ou de noms de répertoires qui se baladent en dur dans ton code.

Reply

Marsh Posté le 24-08-2006 à 16:50:09   

Reply

Marsh Posté le 24-08-2006 à 16:53:35    

Ok je vais essayé en Off pour voir si il m'offre quelquechose a me mettre sous la dent
 
Je te dit ca des qu'il plante a nouveau ;)

Reply

Marsh Posté le 24-08-2006 à 17:09:44    

par contre, je pense à un truc con...
 
t'es pas sorti de l'auberge là.
parceque si une fois l'erreur levée iis part en live, ça veut dire qu'en debug ou non, tu ne verras pas où est l'erreur.
 
qu'est-ce qui t'empêche de foutre des logs un peu partout dans le site ? là au moins tu verrais le dernier truc exécuté avant de planter, donc une idée précise d'où ça plante


Message édité par MagicBuzz le 24-08-2006 à 17:10:21
Reply

Marsh Posté le 24-08-2006 à 17:15:18    

Comment ca iis part en live ?
 
En fait sa me souleve une exception, comme ca le ferais pour d'autre, donc je pense que je verais l'erreur :??:
 
Pour ta derniere intervention, quel genre de log tu parle ?
Et tu sais mettre des logs dans 7 applications contenant une 40aine de pages aspx chacune sa fait beaucoup :(

Reply

Marsh Posté le 24-08-2006 à 17:20:16    

déjà, tu sais quelle appli c'est ?
ou si c'est une des 7 qui provoque le problème, sans plus de précision ?
 
pour les logs, je parle d'un truc de ce genre :
 

Code :
  1. using System;
  2. namespace bci
  3. {
  4. /// <summary>
  5. /// Summary description for log.
  6. /// </summary>
  7. public class log
  8. {
  9.  private string _filename;
  10.  public log(string filename)
  11.  {
  12.   this._filename = filename;
  13.  }
  14.  public void writeline(string message)
  15.  {
  16. #if DEBUG
  17.   System.IO.TextWriter fil = new System.IO.StreamWriter(this._filename, true, System.Text.Encoding.ASCII);
  18.   fil.WriteLine(message);
  19.   fil.Flush();
  20.   fil.Close();
  21.   fil = null;
  22. #endif
  23.  }
  24. }
  25. }


 
 
Et tu fais des appels à log.writeline() un peut partout dans ton code.

Reply

Marsh Posté le 24-08-2006 à 17:23:20    

MagicBuzz a écrit :

déjà, tu sais quelle appli c'est ?
ou si c'est une des 7 qui provoque le problème, sans plus de précision ?
 
pour les logs, je parle d'un truc de ce genre :
 

Code :
  1. using System;
  2. namespace bci
  3. {
  4. /// <summary>
  5. /// Summary description for log.
  6. /// </summary>
  7. public class log
  8. {
  9.  private string _filename;
  10.  public log(string filename)
  11.  {
  12.   this._filename = filename;
  13.  }
  14.  public void writeline(string message)
  15.  {
  16. #if DEBUG
  17.   System.IO.TextWriter fil = new System.IO.StreamWriter(this._filename, true, System.Text.Encoding.ASCII);
  18.   fil.WriteLine(message);
  19.   fil.Flush();
  20.   fil.Close();
  21.   fil = null;
  22. #endif
  23.  }
  24. }
  25. }


 
 
Et tu fais des appels à log.writeline() un peut partout dans ton code.


 
Bah en fait je suis pas sur a 100% mais j'ai une idée de l'appli.
 
Pas bete ta classe permet de créer un fichier dans lequel le loguerais moi même des messages tout au long de l'application, pas bete ;)
 
Bon bah j'attend que sa plante, j'essaye la premiere solution, sinon j'essayerais la seconde :)

Reply

Marsh Posté le 24-08-2006 à 17:26:35    

surtout, l'intérêt du truc, c'est qu'après, iis plante à chaque page si j'ai bien compris, jusqu'à ce qu'il redémarre. donc si tu regardes dans le fichier la dernière ligne, c'est à priori juste après que la saturation de mémoire est arrivée. tu as donc une bonne chance pour que ce soit au niveau de ta "fuite" mémoire (mais rien n'est sûr, c'est ça qui est con)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed