2014-07-06 3 views
0

Je construis un serveur qui reçoit beaucoup de requêtes et de réponses.Débogage dans node.js

Dans certains cas, il y a une erreur qui provoque le serveur pour écraser:

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: ENOENT, open '/mnt/ace/0/file' 

J'ai deux problèmes:

  1. la trace de la pile ne me donne pas d'informations sur la ligne dans mon application qui provoque cette exception (je ne peux pas faire de débogage manuellement car cela se produit juste quand je reçois 1000 requêtes ou plus).
  2. Je ne veux pas que mon serveur ould écraser. Je préfère qu'il soulève une exception, mais continuera à travailler.

Quelle est la meilleure implémentation pour cela?

+0

Voir http://stackoverflow.com/questions/7310521/node-js-best-practice-exception-handling – JohnnyHK

Répondre

2

Vous pouvez écouter pour ce genre de choses et pas avoir crash l'application, mais ce n'est pas toujours une bonne idée.

process.on('uncaughtException', function(err) { 
    console.log('Something bad happened'); 
    console.log(err.stack); 
}); 

Dans votre cas, avez-vous essayé de vérifier les paramètres ulimit? Vous avez peut-être des problèmes pour ouvrir les handles de fichiers sous des charges de plus de 1000+.

Une autre façon de penser à cela est d'utiliser domaines (si vous utilisez> = 0.8). Les domaines vous donnent un meilleur contrôle de la gestion des erreurs en fonction des contextes qui les provoquent.

var domain = require('domain').create(); 

domain.on('error', function(err) { 
    console.log(err); 
}); 

domain.run(function() { 
    // Your code that might throw 
});