2017-09-14 15 views
0

이 오류는 8-10 시간의 웹 서비스가 영원히 계속 모듈로 실행 된 후에 발생합니다.내 nodejs 웹 서비스가 다음 오류로 인해 종료됩니다.

{ 
    "date": "Wed Sep 13 2017 21:22:25 GMT+0000 (UTC)", 
    "process": { 
     "pid": 24337, 
     "uid": 1000, 
     "gid": 1000, 
     "cwd": "/path/to/my/file/", 
     "execPath": "/path/to/my/nvm/.nvm/versions/node/v4.4.5/bin/node", 
     "version": "v4.4.5", 
     "argv": ["/path/to/my/nvm/.nvm/versions/node/v4.4.5/bin/node", "/path/to/my/file/app.js"], 
     "memoryUsage": { 
      "rss": 133083136, 
      "heapTotal": 83753568, 
      "heapUsed": 71120576 
     } 
    }, 
    "os": { 
     "loadavg": [0.0029296875, 0.0146484375, 0.04541015625], 
     "uptime": 397147 
    }, 
    "trace": [{ 
     "column": 13, 
     "file": "/path/to/my/file/node_modules/mysql/lib/protocol/Protocol.js", 
     "function": "Protocol.end", 
     "line": 109, 
     "method": "end", 
     "native": false 
    }, { 
     "column": 28, 
     "file": "/path/to/my/file/node_modules/mysql/lib/Connection.js", 
     "function": "", 
     "line": 102, 
     "method": null, 
     "native": false 
    }, { 
     "column": 20, 
     "file": "events.js", 
     "function": "emitNone", 
     "line": 72, 
     "method": null, 
     "native": false 
    }, { 
     "column": 7, 
     "file": "events.js", 
     "function": "Socket.emit", 
     "line": 166, 
     "method": "emit", 
     "native": false 
    }, { 
     "column": 12, 
     "file": "_stream_readable.js", 
     "function": "endReadableNT", 
     "line": 913, 
     "method": null, 
     "native": false 
    }, { 
     "column": 9, 
     "file": "node.js", 
     "function": "nextTickCallbackWith2Args", 
     "line": 442, 
     "method": null, 
     "native": false 
    }, { 
     "column": 17, 
     "file": "node.js", 
     "function": "process._tickDomainCallback", 
     "line": 397, 
     "method": "_tickDomainCallback", 
     "native": false 
    }], 
    "stack": ["Error: Connection lost: The server closed the connection.", " at Protocol.end (/path/to/my/file/node_modules/mysql/lib/protocol/Protocol.js:109:13)", " at Socket.<anonymous> (/path/to/my/file/node_modules/mysql/lib/Connection.js:102:28)", " at emitNone (events.js:72:20)", " at Socket.emit (events.js:166:7)", " at endReadableNT (_stream_readable.js:913:12)", " at nextTickCallbackWith2Args (node.js:442:9)", " at process._tickDomainCallback (node.js:397:17)"], 
    "level": "error", 
    "message": "uncaughtException: Connection lost: The server closed the connection.", 
    "timestamp": "2017-09-13T21:22:25.271Z" 
} 

왜 이런 일이 발생했는지 알 수 없습니까? 나는 또한 내 databse가 유휴 상태가되는지 아닌지를 확인했지만 내 데이터베이스는 유휴 상태가 아니므로 완벽합니다. 그렇다면 내 노드 프로세스를 죽이는 또 다른 방법은 무엇입니까? 나는 여러 가지 연구를 해왔다. 내 API를 죽이는 것은 전혀 몰랐다. 그런 다음 API를 통해 요청을 로깅하기 시작했다. 그런 다음이 오류 메시지를 발견했으며, 이는 몇 시간의 연속 처리 후에 만 ​​발생한다.

답변

2

스택 추적에서 MySQL 데이터베이스 연결이 MySQL 서버 자체에 의해 닫혀 있음을 볼 수 있습니다.

This issue은 왜 서버가 당신의 연결을 끊을 수 있고 어떻게 MySQL 서버 시간 초과를 늘릴 수 있는지에 대한 배경 지식을 제공합니다.

Here is a similar question이 답변은 Node.js 앱 자체에서이 특정 오류 이벤트를 처리하는 방법을 설명합니다. 이는 연결이 끊어진 상태에서 즉석에서 MySQL 서버에 다시 연결하는 데 유용합니다.

두 번째 링크의 예제에 따라 안전하게 다시 연결하면 이러한 데이터베이스 시간 초과로부터 응용 프로그램을 보호 할 수 있어야합니다. 이는 단순히 응용 프로그램 외부의 동작에 완전히 의존하지 않아도되므로 제한 시간 길이를 확장하는 것보다 훨씬 엄격한 솔루션입니다.

+0

난 다음에이 오류를 얻고 두 번째 {[오류 : ER_CON_COUNT_ERROR : 너무 많은 연결] 코드 : 'ER_CON_COUNT_ERROR', 의 errno : 1040 SQLSTATE : 정의되지 않은, 치명적인 : TRUE} – Jagadeesh