Node js ECONNRESET

Je m exécute un Express js application avec la prise.io pour un chat
webapp et j'obtiens l'erreur suivante au hasard autour de 5 fois au cours de
24h. Le nœud processus est enveloppé dans éternellement et il redémarre
lui-même immédiatement.

Problème est que le redémarrage de l'express de coups de pied à mes utilisateurs de leurs chambres
et personne n'en veut.

Le serveur web est représenté par HAProxy. Il n'y a pas de socket problèmes de stabilité, tout en utilisant les websockets et flashsockets transports. Je ne peux pas reproduire cela sur le but.

C'est l'erreur avec le noeud v0.10.11:

events.js:72
        throw er; //Unhandled 'error' event
              ^
Error: read ECONNRESET     //alternatively it s a 'write'
    at errnoException (net.js:900:11)
    at TCP.onread (net.js:555:19)
error: Forever detected script exited with code: 8
error: Forever restarting script for 2 time

MODIFIER (2013-07-22)

Ajouté deux socket.io client gestionnaire d'erreur et de l'exception non interceptée. Semble que celui-ci attrape l'erreur:

process.on('uncaughtException', function (err) {
  console.error(err.stack);
  console.log("Node NOT Exiting...");
});

Donc je suppose que c'est un socket.io question, mais d'une requête http vers un autre serveur que je fais ou mysql/redis connexion. Le problème, c'est que la pile d'erreur ne m'aide pas à identifier mon problème. Voici le journal de sortie:

Error: read ECONNRESET
    at errnoException (net.js:900:11)
    at TCP.onread (net.js:555:19)

Comment puis-je savoir quelles sont les causes? Comment puis-je obtenir plus de l'erreur?

Ok, pas très bavard mais ici s la stacktrace avec "longjohn":

Exception caught: Error ECONNRESET
{ [Error: read ECONNRESET]
  code: 'ECONNRESET',
  errno: 'ECONNRESET',
  syscall: 'read',
  __cached_trace__:
   [ { receiver: [Object],
       fun: [Function: errnoException],
       pos: 22930 },
     { receiver: [Object], fun: [Function: onread], pos: 14545 },
     {},
     { receiver: [Object],
       fun: [Function: fireErrorCallbacks],
       pos: 11672 },
     { receiver: [Object], fun: [Function], pos: 12329 },
     { receiver: [Object], fun: [Function: onread], pos: 14536 } ],
  __previous__:
   { [Error]
     id: 1061835,
     location: 'fireErrorCallbacks (net.js:439)',
     __location__: 'process.nextTick',
     __previous__: null,
     __trace_count__: 1,
     __cached_trace__: [ [Object], [Object], [Object] ] } }

Ici je sers le flash fichier de régulation de socket:

net = require("net")
net.createServer( (socket) =>
  socket.write("<?xml version=\"1.0\"?>\n")
  socket.write("<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">\n")
  socket.write("<cross-domain-policy>\n")
  socket.write("<allow-access-from domain=\"*\" to-ports=\"*\"/>\n")
  socket.write("</cross-domain-policy>\n")
  socket.end()
).listen(843)

Cela peut-il être la cause?

  • peut-être que cela peut vous aider (parlé à quelqu'un qui travaille au sein de node js) gist.github.com/samsonradu/1b0c6feb438f5a53e30e. Je ll déployer le support.gestionnaire d'erreurs aujourd'hui et vous le fait savoir.
  • le socket.erreur poignées ne de t aider, mais le processus.sur('uncaughtException') intercepte l'erreur. Voici la console.journal de l'erreur: { [Erreur: lire ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: "lire"}
  • ECONNRESET pourrait être de problème de réseau. Comme vous le savez, il est impossible d'attraper toutes les exceptions lors de l'essai. Certains vont apparaître sur votre serveur de production. Vous devrez faire votre serveur robuste. Vous pouvez manipuler la session de la suppression par l'utilisation de Redis comme espace de stockage. Il rend vos séances de persister même après votre nœud de serveur tombe en panne.
  • Pourquoi est-ce lié à la session de suppression? Ils sont gérés par le Redis quand même.
  • Cette coutures pour moi que vous êtes l'obtention d'un socket délai d'expiration de l'un de vos clients connectés. Essayez d'ajouter une "erreur" auditeur à toutes vos connexions, et non pas le processus lui-même.
  • net.js fait beaucoup de debuglog-ing quand ça va émettre une erreur, vous pourriez obtenir quelques kilométrage de réglage env.NODE_DEBUG="net" et puis correspondant de la sortie contre les sites de la source.
  • définir des clients connectés. Le nœud du serveur n'écoute que de websocket connexions et ils ont un gestionnaire d'erreur ajouté.
  • Vous avez au moins une socket TCP écoute qui n'a pas de gestionnaire d'ensemble. Alors maintenant, il est temps de vérifier où que l'on est 😀
  • juste comme remarque: dans mon cas, cela se produit avec un childprocesses stdio et pas un socket tcp ou quoi que ce soit d'autre. brute stdio. vont essayer de uncaughtException cas maintenant. merci.
  • Pouvez-vous montrer le code correspondant à votre serveur d'où l'erreur se produit. Ou au moins un minimum de code pour reproduire l'erreur. Il est difficile sans regarder le code.
  • voici quelques éléments pertinents (si vous re fine avec Coffeescript) gist.github.com/samsonradu/5585b0f4a101fee3cab4
  • github.com/joyent/node/releases/tag/v0.10.12 voir un correctif à douille écrit. sera de mise à niveau
  • Simplement en ajoutant process.on('uncaughtException', function (err) { ... }) triés cela pour moi. Il ne va pas à la racine du problème, mais l'erreur est assez rare pour moi que cette rapide et sale solution est parfaite pour mon cas d'utilisation.
  • Liés: si quelqu'un voit ce qui se passe sur quelques nuages/les offres PaaS, il pourrait être parce que les instances sont de limitation vers le bas (pendant les heures creuses).