2012-01-26 5 views
3

게시물의 약 10 %를 PUT 또는 내 Node.js를 HTTPS에 걸 요청 서버가 응답을 2 분을 넣어. 나머지 90 %는 예상대로 동작합니다.2 분 지연 또는 요청

내가 요청의 몸이 서버에 의해 수신 tshark를 확인했지만, 다음은 '데이터'와 ServerRequest에 개체의 '끝'이벤트를 트리거 2 분 정도 소요됩니다.

이 대기 시간이 발생하는 요청은 무작위로 표시되지만 발생하면 패킷 수신과 '데이터'및 '종료'이벤트가 실행되는 사이의 대기 시간은 항상 정확히 2 분입니다. 내가 단일 패킷에 도착있어 작은 JSON 객체를 게시하도록하겠습니다 이러한 모든 요청에 ​​대한

. 대기 시간이 발생한 요청의 경우 세션 쿠키가 즉시 구문 분석되므로 헤더가 응용 프로그램에 수신되었다는 것을 알고 있습니다. 세션 인증 후, '데이터'및 '종료'이벤트가 2 분 후에 최종적으로 방출 될 때까지 아무 것도 일어나지 않습니다.이 시간이 지나면 본문이 구문 분석되어 내 데이터베이스에 저장됩니다.

이 아마존 리눅스를 실행하는 EC2 작은 인스턴스 내 노드 응용 프로그램이나 내 서버에 문제에 문제가 될 가능성이 있습니까? 요청 본문이 들어있는 패킷이 응용 프로그램에 청크로 전달 될 때까지 2 분이 걸리는 이유는 무엇입니까?

감사합니다.

업데이트 : lib/http.js에서 parser.onBody를 'b'로 수정했으며 2 분 지연이 끝날 때까지이 메소드가 호출되지 않음을 알 수 있습니다. 이 문제는 내 응용 프로그램보다 낮은 수준에 있음을 나타냅니다. 또한 ec2 인스턴스를 변경했지만 도움이되지 않았습니다.

+0

일관된 2 분입니까? 이러한 요청에 얼마나 많은 작업이 이루어지고 있습니까? 가비지 컬렉션과 관련이있을 가능성은? http://stackoverflow.com/questions/5603011/node-js-and-v8-garbage-collection –

+0

네, 매번 정확히 2 분입니다. 별다른 노력 - 구문 분석 된 URL을 첨부하고 세션 쿠키를 구문 분석하고 세션 객체를 redis에서 첨부합니다. 나는 그 어떤 것도 지체하지 못했다. 나는 그것이 붙어있는 동안 정상적인 다른 게시물 요청을 계속받을 수 있기 때문에 가비지 콜렉션이라고 생각하지 않습니다. –

답변

1

합니다. 나는 주된 청취자 기능이 아닌 인증 후 콜백에 req.on('data', function(chunk) {req.body += chunk});을 가지고 있었다. 듣기 시작하기 전에 종종 페이로드가 도착했습니다.

+0

업데이트 게시자 : Andrew –

3

각 요청에서 노드 응용 프로그램이 무엇을하는지 정확히 알지 못해도 말하기 어렵습니다. 예를 들어 다른 백엔드 서비스와 이야기해야한다면 RAM에있는 캐시에서 이미지를 제공하는 것과는 조금 다릅니다.

EC2 작은 인스턴스는 매우 까다로운 것일 수 있습니다. 그들은 다른 고객들과 크게 공유되므로 가끔 이상하게 반응하지 않을 수 있습니다. 이것에 대한 느낌을 얻는 한 가지 방법은 EC2 인스턴스의 명령 줄에서 'top'을 실행하는 것입니다. % st 열을 찾으십시오. 이는 훔칩니다. 높으면 나쁘다. 새로운 EC2 인스턴스로 전환한다. (또는 더 큰 하나를 얻을) 난 단지 인증 후 '데이터'이벤트를 수신 한