2014-10-22 3 views
1

AWS로 이식 된 mod_perl2 응용 프로그램을 가져 오려고합니다. 포트의 일부로 나는 데비안 Squeeze에서 최신 stable mod_perl & Apache2 조합으로 Wheezy로 이동할 것이라고 생각했습니다.mod_perl2 with apache 2.22 Apache2 :: RequestIO :: print : (103) 소프트웨어로 인해 연결이 중단되었습니다.

응용 프로그램이 JSON 응답을 클라이언트에 쓰려고 시도 할 때까지 올바르게 작동합니다. 이 시점에서, 각각의 요청은 클라이언트에서 취소되고 나는 클라이언트에 기록 할 때마다 서버에서 나는, 즉 오류

Apache2::RequestIO::print: (103) Software caused connection abort 

를 얻을 : 나는 응답을 보내고 tcpdump을 시도했습니다

$self->req->print($output); 

클라이언트에게 보낸다. 그리고 나는 그것이 쓰여지는 것을 볼 수는 있지만, 클라이언트 측에서 아무 응답도받지 못하고 단지 칩을 barfs한다. 이 문제를 해결하는 방법에 대한 정보를 찾을 수 없습니다.

답변

2

많은 질문없이 인터넷에서이 질문에 대해 묻는 사람이 많습니다. 내 문제에 대한 해결책은 매우 구체적 이었지만 어쨌든 내가 한 일을 게시하겠다고 생각했는데 누군가를 도울 수 있습니다.

클라이언트가 응답이 완전히 작성되기 전에 요청을 취소하고 있었는데, Apache :: RequestIO가 삭제되었습니다 (여전히 알 수없는 이유로). 왜 내가이 동작을 보았는지 알 수 없었습니다.

tcpdump을 사용하면 데이터가 클라이언트에 기록되고 있음을 알 수있었습니다.

크롬에서 페이지를 검사하고 네트워크 스택을 보면 아무런 응답이 없는데도 데이터 요청이 취소되었음을 알 수있었습니다. 다른 서버에서 코드가 정상적으로 작동했기 때문에 이상했습니다. 응답은 쓰여지고 있었다). 아파치가 인쇄 IO에서 오류가 발생하여 작성된 바이트가 데이터 바이트와 같은지 점검 할 수 없기 때문에 디버깅이 더 어려워졌습니다. 뭔가가 서버 측에 갇혀 있는지 확실하지 않았습니다.

응답의 Content-Type을 application/json에서 text/html으로 변경하여 페이지를 쿼리하고 실제 응답을 텍스트로 볼 수 있습니다. 일단 내가 그랬 으면, 나는 그 반응이 좋았다는 것을 알 수 있었다.

다른 원인을 찾기 시작했는데 새 서버로 마이그레이션 할 때 새로운 서버를 가리키는 DB의 일부 URL을 변경하지 못했습니다. 즉, 내 응용 프로그램이 이전 DB의 일부 데이터. 차례로 타이밍 문제가 발생하여 문제가 발생했습니다. 구성을 수정하면 문제가 사라졌습니다.