복붙노트

[NODEJS] 어떻게 Node.js를에 오류 ECONNRESET을 디버깅 할 수 있습니까?

NODEJS

어떻게 Node.js를에 오류 ECONNRESET을 디버깅 할 수 있습니까?

해결법


  1. 1.당신은 이미 짐작 : 그것은 연결 오류입니다.

    당신은 이미 짐작 : 그것은 연결 오류입니다.

    "ECONNRESET"는 TCP 대화의 다른 쪽은 급격히 접속 끝이 닫힌 것을 의미한다. 이것은 대부분의 아마 하나 이상의 응용 프로그램 프로토콜 오류 때문입니다. 당신은 어떤 것에 대해 불평 있는지 확인하기 위해 API 서버 로그에서 볼 수 있었다.

    그러나 당신은 또한 문제를 디버깅 잠재적 오류를 확인하는 방법을 찾고 있기 때문에, 당신은 한 번 봐해야 "소켓이 NodeJS에서 오류를 끊지 디버깅하는 방법을?" 어떤는 모두 질문과 관련하여 유래에 게시했습니다.

    EDIT (2013년 7월 22일)

    나는 위의 쓴 :

    무엇도 사건이 될 수 : 임의의 시간에, 다른 쪽은 과부하 단순히 결과로 연결을 죽이고있다. 그런 경우, 정확하게 연결하는지에 따라 달라집니다 ...

    그러나 한 가지는 확실 : 당신이 실제로 예외가 발생하여 TCP 연결에 읽기 오류가 있습니다. 당신은 그것을 확인 당신이 당신의 편집에 게시 된 오류 코드를보고 그것을 볼 수 있습니다.


  2. 2.내가 플래시 정책 파일을 봉사했다 간단한 TCP 서버는이 원인이되었다. 지금은 핸들러를 사용하여 오류를 잡을 수 있습니다 :

    내가 플래시 정책 파일을 봉사했다 간단한 TCP 서버는이 원인이되었다. 지금은 핸들러를 사용하여 오류를 잡을 수 있습니다 :

    # serving the flash policy file
    net = require("net")
    
    net.createServer((socket) =>
      //just added
      socket.on("error", (err) =>
        console.log("Caught flash policy server socket error: ")
        console.log(err.stack)
      )
    
      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)
    

  3. 3.응용 프로그램은 노드의 업그레이드 후에 erroring 시작 어디 비슷한 문제가 있었다. 나는이이 항목 v0.9.10 노드 릴리스로 다시 추적 할 수 있다고 생각합니다 :

    응용 프로그램은 노드의 업그레이드 후에 erroring 시작 어디 비슷한 문제가 있었다. 나는이이 항목 v0.9.10 노드 릴리스로 다시 추적 할 수 있다고 생각합니다 :

    이전 버전의 클라이언트에서 중단에 오류가 밖으로하지 않을 것입니다. 클라이언트에서 연결의 틈은 노드에 오류 ECONNRESET가 발생합니다. (적어도 나를 위해) 수정 난 당신이 포착되지 않은 예외가했던 생각하는 오류를 처리 할 수 ​​있었다, 그래서 나는, 노드에 대해이 의도 기능을 믿습니다. 나는 net.socket 처리기에서 처리하지만.

    당신이 보여줄 수 :

    간단한 소켓 서버와 GET 노드 v0.9.9 및 v0.9.10합니다.

    require('net')
        .createServer( function(socket) 
        {
               // no nothing
        })
        .listen(21, function()
         {
               console.log('Socket ON')
        })
    

    v0.9.9을 사용하여 시작하고 다음이 서버에 FTP를 시도합니다. 나는 FTP 포트 나 윈도우에있어 및 FTP 클라이언트가있는 경우에만 있기 때문에 21을 사용하지만 텔넷 클라이언트 편리하고있다.

    그런 다음 클라이언트 측에서 바로 연결이 끊어. (난 그냥 Ctrl-C를하고 있어요)

    노드 v.0.9.10를 사용하여 최대 때 노드 v0.9.9 및 오류를 사용할 때 NO 오류를 볼 수 있습니다.

    생산, 나는 v.0.10 사용합니다. 뭔가 여전히 오류가 있습니다. 다시 말하지만, 나는 이것이 의도 생각이 솔루션은 코드에서 오류를 처리하는 것입니다.


  4. 4.오늘 같은 문제가 있었다. 몇 가지 조사 후 나는 매우 유용한 --abort - 온 - 캐치되지 않는-예외 옵션 Node.js를 발견했다. 그것은 훨씬 더 자세한 정보 제공 및 유용한 오류 스택 추적뿐만 아니라 더 디버깅을 허용하는 응용 프로그램 충돌에 핵심 파일을 저장뿐만 아니라.

    오늘 같은 문제가 있었다. 몇 가지 조사 후 나는 매우 유용한 --abort - 온 - 캐치되지 않는-예외 옵션 Node.js를 발견했다. 그것은 훨씬 더 자세한 정보 제공 및 유용한 오류 스택 추적뿐만 아니라 더 디버깅을 허용하는 응용 프로그램 충돌에 핵심 파일을 저장뿐만 아니라.


  5. 5.저도 같은 문제에 직면했지만, 난 배치하여 완화 :

    저도 같은 문제에 직면했지만, 난 배치하여 완화 :

    server.timeout = 0;
    

    이전 server.listen. 서버가 여기에 HTTP 서버입니다. 기본 제한 시간은 API 문서에 따라 이분입니다.


  6. 6.당신은 서버 통신에 서버가 매우 낮은 값으로 설정 server.maxConnections이있는 경우 또 다른 가능한 경우는 (그러나 희귀)이 될 수 있습니다.

    당신은 서버 통신에 서버가 매우 낮은 값으로 설정 server.maxConnections이있는 경우 또 다른 가능한 경우는 (그러나 희귀)이 될 수 있습니다.

    노드의 핵심 lib 디렉토리의 net.js 그것은 clientHandle.close ()를 호출하는 것 또한 오류 ECONNRESET 원인 :

    if (self.maxConnections && self._connections >= self.maxConnections) {
      clientHandle.close(); // causes ECONNRESET on the other end
      return;
    }
    

  7. 7.또한 단지 내 서버 내 문제를 해결 시작 "노드 server.js"를 사용, 내 개발하는 동안 나는 내 서버를 시작 nodemon를 사용하지 않는 것입니다 해결 방법을 ECONNRESET의 오류가 발생합니다.

    또한 단지 내 서버 내 문제를 해결 시작 "노드 server.js"를 사용, 내 개발하는 동안 나는 내 서버를 시작 nodemon를 사용하지 않는 것입니다 해결 방법을 ECONNRESET의 오류가 발생합니다.

    그것은 이상한, 그러나 그것은 나를 위해 일한 지금은 다시 ECONNRESET 오류가 표시되지 않습니다.


  8. 8.예, 정책 파일의 서빙은 확실히 충돌을 일으킬 수 있습니다.

    예, 정책 파일의 서빙은 확실히 충돌을 일으킬 수 있습니다.

    반복, 당신의 코드에 지연을 추가 :

    net.createServer( function(socket) 
    {
        for (i=0; i<1000000000; i++) ;
        socket.write("<?xml version=\"1.0\"?>\n");
    …
    

    ... 사용 텔넷 포트에 연결합니다. 지연이 만료되기 전에 socket.write에 오류가 발생 할 때 분리 텔넷 경우 충돌 (캐치되지 않는 예외)을 얻을 수 있습니다.

    여기 충돌을 방지하기 위해, 단지 읽기 / 소켓을 쓰기 전에 오류 처리기를 추가 :

    net.createServer(function(socket)
    {
        for(i=0; i<1000000000; i++);
        socket.on('error', function(error) { console.error("error", error); });
        socket.write("<?xml version=\"1.0\"?>\n");
    }
    

    위의 분리를 시도 할 때, 당신은 단지 대신 충돌의 로그 메시지가 나타납니다.

    작업이 완료 때, 지연을 제거해야합니다.


  9. 9.나도이 오류를했고, 디버깅 및 분석의 일 후에 그것을 해결할 수 있었다 :

    나도이 오류를했고, 디버깅 및 분석의 일 후에 그것을 해결할 수 있었다 :

    나를 위해 (부두 노동자에 대한) 버추얼 문제였다. 나는 포트 포워딩 내 VM에 구성 오류는 전달 된 포트에서 발생했다.

    다음 관측은 당신에게 내가 투자 한 일의 일을 저장할 수 있습니다 :

    -> 그림은 뭔가 방화벽 등의 VM처럼, (-settings) 네트워크와 장난 경우에서, 이것은 아마도 문제의 원인입니다.


  10. 10.단순히 다른 네트워크에 연결하여 문제를 해결했다. 즉, 가능한 문제 중 하나입니다.

    단순히 다른 네트워크에 연결하여 문제를 해결했다. 즉, 가능한 문제 중 하나입니다.

    상술 한 바와 같이, ECONNRESET 수단은 TCP 대화가 급격하게 연결 말단 폐쇄있다.

    인터넷 연결은 일부 서버에 연결을 차단 될 수 있습니다. 내 경우, 나는 MLAB (호스트 MongoDB를 데이터베이스 클라우드 데이터베이스 서비스)에 연결을 시도했다. 그리고 내 ISP는 그것을 차단하고 있습니다.


  11. 11.나는이 문제를 해결했다 :

    나는이 문제를 해결했다 :

    나도 같은 NPM 명령을 시도하고 그 후 좋은 점은 밖으로 일이었다. 나는 그 간단 확실하지 않았다.

    나는 CentOS는 7을 사용하고 있습니다


  12. 12.난 그냥 내 사용 사례 적어도이 아웃, 생각.

    난 그냥 내 사용 사례 적어도이 아웃, 생각.

    나는 ECONNRESET을 얻고 있었다. 그것은 정말 빠르게 API 호출 시간의 톤으로 서버를 타격하고, 길을 내 클라이언트가 설정되었다는 것을 밝혀졌다 - 그리고 그것은 한 번만 엔드 포인트를 칠 필요가 있었다.

    내가 그 고정 할 때 오류가 사라졌다.


  13. 13.저도 같은 문제를 가지고 그리고 Node.js를 버전이 문제라고 나타납니다.

    저도 같은 문제를 가지고 그리고 Node.js를 버전이 문제라고 나타납니다.

    내가 Node.js를 (10.14.2)의 이전 버전을 설치하고 모든 NVM를 사용하여 확인 하였다 (다른 버전으로 전환 빠르게 Node.js를 여러 버전을 설치 허용).

    그것은 "깨끗한"해결책은 아니지만, 일시적으로 서비스를 제공 할 수 있습니다.


  14. 14.socket.io에이 옵션을 추가하십시오 :

    socket.io에이 옵션을 추가하십시오 :

    const options = { transports: ['websocket'], pingTimeout: 3000, pingInterval: 5000 };
    

    내가 당신을 도울 것입니다 희망!

  15. from https://stackoverflow.com/questions/17245881/how-do-i-debug-error-econnreset-in-node-js by cc-by-sa and MIT license