내가 m 로 프로그램을 실행하기 위한 js 익스플레스 채팅합니다 socket.io 저는 약 5 시간 동안 다음과 같은 오류가 내려받습니다 임의로 webapp 24 시간. 프로세스 및 it 의 영생하리라그것이 재가동함으로써 노드입니다 랩된 즉각 단행해야.
문제는 내 발로 재시작하기 익스플레스 이용자 자신의 방 아무도 그 있는 것이다.
웹 서버가 의해 프록시된 아프로스리. 소켓 안정성 문제가 없다, 그냥 웹 소켓 사용 및 플라시속츠 격침했다. 이 고의적으로요 재현할 수 없습니다.
이는 오류로 노드입니다 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
모두 클라이언트 오류 처리기 (socket.io) 및 포착되지 않는 idfsysobject. 처리기에서 덧붙였다. 이 번호요 오류 물릴 것으로 보인다.
process.on('uncaughtException', function (err) {
console.error(err.stack);
console.log("Node NOT Exiting...");
});
그래서 용의자요 it& # 39 의 문제가 아닌 다른 나는한다 또는 mysql 서버 socket.io 하지만 http 요청 / 레디스 연결. 문제는 error: 스택할 doesn& # 39, t 돕는다구요 식별했습니까 내 코드 배정됩니다. 다음은 로그에서는 출력:
Error: read ECONNRESET
at errnoException (net.js:900:11)
at TCP.onread (net.js:555:19)
How do I know what 인해 이? 어떻게 구입합니까 자세한 오류?
그런데 여기서 자세히 확인, 별로 없는 s " stacktrace 가 함께 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] ] } }
나는 여기서 fash 경배하되 소켓 파일:
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)
이런 일이 생길 수 있는 이유는 무엇일까요?
막 이미 있습니다. # 39 의 it& 연결 오류입니다.
, " ECONNRESET" 고말은 the other side of the end of the TCP 연결을 갑자기 대화를 폐쇄했습니다. 이것은 아마도 인해 대부분의 하나 이상의 애플리케이션 프로토콜 오류입니다. 서버 로그를 바라볼 수 있는지 apiu 뭔가를 알려 줍니다.
그러나 또한 오류를 확인할 수 있는 방법을 찾고, 잠재적으로는 디버그합니다 문제를 살펴보도록 " 합니다; [소켓을 디버그로 어떻게 끊어 오류를 노데지스?] (https://stackoverflow.com/a/11542134/2432317) 가 이와 관련해 게시하기를 dell. 스택 오버플로 충족되었으며 모두가 질문이예요 ",
>. Quick and dirty 솔루션 개발을 위한 :
>. [룽장] 사용하여 (https://github.com/mattinsler/longjohn) 를 포함할 기절해있는 확보하십시오 스택 추적을 비동기 운영체.
>.
>. 하나만 리스너에 페이징됩니다 그룹의 사용할 수 있습니다 ([도메인과의] http://nodejs.org/api/all.html # all_domain) 에 따라 잡을 수 있을 뿐만 아니라 다른 오류뿐만 런타임용으로 개발하십시오. 각 운영 관련 smartupdate http 로 비동기 (서버 / 클라이언트) 는 서로 다른 [도메인임] (http://nodejs.org/api/all.html # all_domain) 컨텍스트로 비교하여 코드의 일부를 다른 도메인 '오류' 는 말을 하면 자동으로 이벤트 및 전파 迈向 it& # 39 의 İç 처리기에서. 그래서 할 수 있는 경우에만 처리기에서 내려받습니다 오류 및 데이터. [또한 더 많은 정보를 얻기 위해 자유롭겠죠] (http://nodejs.org/api/all.html # all_additions_to_error_objects)
As I 작성했습니까 위쪽:
>. , " ECONNRESET" 고말은 the other side of the end of the TCP 연결을 갑자기 대화를 폐쇄했습니다. 이것은 아마도 인해 대부분의 하나 이상의 애플리케이션 프로토콜 오류입니다. 서버 로그를 바라볼 수 있는지 apiu 뭔가를 알려 줍니다.
어떤 사건을 수도 있다. 임의의 시간에, the other side 는 단순히 죽일겁니다 과부하된 연결 그 결과. # 39 의 경우, 어떤 사건을 that& 달려 you& # 39, re 연결하든 당근이지를.
하지만 한 가지 thing& # 39 의 반드시: 그러나 이로 idfsysobject. TCP 연결을 따라 읽기 오류가 있을 수 있습니다. Error code 너회가 게시하기를 편집할 수 있는 것을 볼 수 있습니다 보면 확인할 수 있는 것이 특징이다.
난 이미 처리를 위한 간단한 tcp 서버일 fash 정책 파일을 이 문제를 일으키고 있었습니다. 지금 내가 할 수 있는 강한 통해 오류가 처리기에서:
# 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)
난 이미 비슷한 문제가 있는 앱을 에로링 아웃해야 시작한 업그레이드한 후 노드입니다. I believe 이 거슬러 올라갈 수 노드입니다 v0.9.10 릴리스에는 이 항목:
이전 버전 wouldn& # 39 에서 중단, t 의 오류 아웃해야 클라이언트입니다. 클라이언트에서 끊어진 연결 오류 레오나르트 던지고 있는 노드입니다. 이 기능을 사용할 수 있기 때문에, i believe 고안되었습니다 노드입니다 수리입니다 (최소한 가져다줄래요) 는 오류, 즉 처리할 수 있는 I believe 재발했지 포착되지 않는 존재한다. 비록 내가 이 처리하십니까 네이소켓 처리기에서.
이 제시하십시오 수 있습니다.
간단한 소켓 서버 및 v0.9.10. v0.9.9 노드입니다 할 수 있으며,
require('net')
.createServer( function(socket)
{
// no nothing
})
.listen(21, function()
{
console.log('Socket ON')
})
It up 이 서버에 FTP 를 사용하여 시작 후 v0.9.9 시도합니다. # 39 m, FTP, 포트 21 i& 사용하여 Windows 에서, FTP 클라이언트, 단지 I& # 39 만 가지고 있지 않지만, 텔넷에 클라이언트입니다 유용합니다.
그럼 그냥 분할합니다 때는기대어, 클라이언트의 접속. (I& # 39 m, 할 일을 한 Ctrl-C)
사용할 때, 오류 v0.9.9 노드입니다 오류가 발생하지 볼 수 있습니다 사용할 때 노드입니다 v. 0.9.10 이상.
그래도 뭔가 및 생산, 내가 사용하는 v. 0.10. 보기입니다 오류가 발생합니다. 다시 말하지만, 나는 이 고안되었습니다 오류 및 솔루션은 코드에서 처리할 수 있는 것 같다.
오늘 같은 문제가 있었다. 내가 찾은 후 매우 유용한 몇 가지 연구를 ['옵션' 시 중단 포착되지 않는 예외 node. js] [1]. 스택 추적 뿐만 아니라 훨씬 더 자세한 정보를 제공하고 있는 파일을 사용할 수 있는 핵심 애플리케이션 충돌 및 유용한 error: 절약합니다 기업에서든 디버그입니다.
[1]: https://nodejs.org/api/cli.html # cli_abort_on_uncaught_exception
하지만 나는 이 같은 문제가 있었는데 평면가공 완화됨 배치하여:
server.timeout = 0;
전에 '세르베스터리스텐'. '서버' 는 HTTP 서버 삽입하십시오. 기본 제한 시간은 2 분 따라 [API 문서를] (http://nodejs.org/api/http.html).
될 수 있는 또 다른 경우 (단, 거의 없음) '의 경우 매우 낮은 값을 설정한' 세르베리마스코너스티언스 서버별로 통신 및.
if (self.maxConnections && self._connections >= self.maxConnections) {
clientHandle.close(); // causes ECONNRESET on the other end
return;
}
[1]: https://github.com/nodejs/node/blob/c9b59e8387b08dab20936f32d2b290804718f688/lib/net.js # L1432-L1435
그래, 네 제공입니다 정책 파일의 말해둘꼐요 산산조각나요 원인이 될 수 있습니다.
연기 추가하기만 반복하려면 데이터베이스에구성원을 코드:
net.createServer( function(socket)
{
for(i=0; i<1000000000; i++);
socket.write("<?xml version=\"1.0\"?>\n")
…
'사용' 텔넷에 .and 접속하십시오 포트. # 39, ll get you& 전에 지연입니다 만료되었는지 텔넷에 차단하십시오 경우, 충돌 (포착되지 않는 예외) 때 던지는 소켓드라이트 오류가 발생했습니다.
읽기 / 쓰기 전에 오류를 피하기 위해 crash 임무야, 추가하기만 처리기에서 소켓:
net.createServer( function(socket)
{
for(i=0; i<1000000000; i++);
socket.on('error', function() { console.log("error"); });
socket.write("<?xml version=\"1.0\"?>\n")
만약 이 일 후에 내가 너무 이를 해결하기 위해 디버깅 및 분석 및 오류가 있었습니다.
버추얼박스 가져다줄래요 (backup-to-disk 부두 노동자) 는 아니다. 난 이미 내 vmo 및 오류 발생 디렉토리에만 있는 포트 포워딩 구성되어 있는 것도 주목할 필요가 있습니다.
며칠 전 그 일을 구할 수 있습니다 다음 관측 투자할 예정이다.
->. 뭔가 메싱 수립하였습니다 알아낼 수 있는 경우, vm, 방화벽 등 네트워크 (설정), 이것은 아마도 이번 사고의 원인을 problem. 상술합니다.
방식으로 이 문제를 해결할 수 있었습니다.
그 후 같은 고궁박물원 명령 및 하느님 협력했습니다 아웃해야 알렸어 찾았다. 내가 하는 것은 물론, t # 39 wasn& 단순해졌습니다.
Centos 7 을 사용하고 있습니다.