HTTP 요청이 가끔 서버에 도달하지 않는 경우가 있습니다. 왜?

HTTP 요청이 가끔 서버에 도달하지 않는 경우가 있습니다. 왜?

우리는 전용 서버에서 웹 서비스를 호스팅합니다. 때때로(20개 중 1개라고 말하겠습니다) 서버에서 응답이 수신되지 않습니다. 이로 인해 시간 초과 오류로 인해 브라우저가 대체됩니다.

중요한 세부 사항: 이 경우 Apache는 요청을 기록하지 않습니다. 서버가 로드되지 않고 여유 메모리와 CPU 전력이 많이 남아 있습니다.

tcpdump 유틸리티를 사용하여 문제 사례를 프로파일링했습니다. 이는 tcpdump가 추적하는 "좋은" 세션과 "나쁜" 세션입니다. 요청은 두 실험 모두 동일합니다. 양호 - 서버가 응답을 반환합니다. 나쁨 - 응답 없음, 시간 초과 오류.

이 데이터를 보면 왜 문제가 발생하는지 아시나요? 오류의 원인에 더 가까이 다가가려면 어떻게 해야 합니까?

실제 IP 주소를 123.45.67.890으로 바꿨습니다.

---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------

---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------

서비스에 대한 세부정보입니다.

일기예보 서비스입니다. MySQL이 지원하는 Perl로 작성되었습니다. 스크립트는 여러 모듈(CPAN 및 자체 모듈)을 사용합니다.

코드는 비교적 간단합니다. 스크립트는 다른 서버에서 날씨를 다운로드하고 데이터 형식을 변환한 후 XML 응답을 반환합니다. 날씨는 MyISAM DB에 캐시됩니다. 스크립트를 통해서도 요청할 수 있는 INNODB(세계 위치 데이터베이스)가 있습니다.

호스팅: Superb호스팅 OS: 우분투

답변1

사용해 보세요tcpdump또는와이어샤크네트워크 트래픽을 모니터링합니다. 그렇게 하면 최소한 네트워킹 문제가 있는지 알 수 있습니다. 즉, 요청이 머신에 전혀 도달했는지 확인합니다.

또한 기본적으로 대부분의 브라우저에는 하나의 동일한 서버에 대해 수행할 수 있는 연결 수가 2개로 제한되어 있습니다. 페이지에 연결을 닫는 것을 "잊는" 자바스크립트 개체가 있는 경우 브라우저가 실제로 요청을 보내지 않을 수도 있습니다.

답변2

IP 주소만 사용하여 요청을 시도할 수 있습니까? 그렇다면 문제의 범위를 좁히는 데 도움이 될 수 있습니다.

모든 요청이 동일한 위치에서 나오며 문제가 있습니까? 그렇다면 다른 장소, 아마도 스타벅스의 노트북 등을 시도해 보십시오. 여러 위치에서 서로 다른 브라우저를 사용하여 AJAX나 복잡한 Javascript가 없는 매우 간단한 페이지에서 발생하는 경우 이는 귀중한 정보입니다.

IP 주소 사용이 안정적으로 작동한다면 DNS일 가능성이 높습니다. 사용 중인 도메인 이름을 알면 범위를 좁히는 데 도움이 될 수 있습니다.

답변3

나는 Michael Gaff와 함께 가서 호스팅 회사에 약간의 돈을 투자할 것입니다. 이러한 종류의 트래픽 문제는 수천 가지 다른 인프라 문제 중에서 패치 패널 실패, NIC, NIC 드라이버 문제 또는 잘못된 케이블 연결로 인해 매우 쉽게 발생합니다.

나는 당신이 이것을 다른 위치에서 시도했고(또는 다른 곳에서 동일한 문제에 대한 보고를 받았음) 상관없이 동일한 문제를 겪었으므로 우리가 문제를 배제할 수 있다고 믿습니다. 맞습니까?

나는 하드웨어 마니아이기 때문에 이상한 소프트웨어 및 네트워크 문제와 대량 파괴의 원인으로 하드웨어 오류를 선호하는 경향이 있습니다.

답변4

문제는 열려 있는 TCP 연결 수가 너무 많아서 가끔 새 연결이 끊어지는 것이었습니다.

관련 정보