> 백엔드 개발 > Golang > My Go HTTP 서버가 'Connection Refused' 또는 'Operation Timed Out' 오류와 함께 ApacheBench 테스트에 실패하는 이유는 무엇입니까?

My Go HTTP 서버가 'Connection Refused' 또는 'Operation Timed Out' 오류와 함께 ApacheBench 테스트에 실패하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-23 03:32:14
원래의
176명이 탐색했습니다.

Why is My Go HTTP Server Failing ApacheBench Tests with

ApacheBench에서 Go HTTP 서버 연결 문제 해결

ApacheBench 테스트 중에 Go HTTP 서버에 연결 문제가 발생했습니다. ApacheBench는 들어오는 요청을 처리하는 서버의 능력에 문제가 있음을 나타내는 "연결 거부됨" 또는 "작업 시간 초과"와 같은 오류를 반환합니다.

근본 원인 식별: 포트 고갈

조사 결과 서버에 임시 포트가 부족한 것으로 나타났습니다. macOS에는 49152-65535의 기본 임시 포트 범위가 있는데, 이는 연결 유지 없이 대량의 동시 요청을 처리하기에는 충분하지 않습니다.

포트 소진 메커니즘

각 HTTP Keepalive가 없는 /1.0 요청은 서버의 고유한 임시 포트를 사용합니다. 이 포트 범위가 고갈되면 운영 체제는 사용되지 않는 포트에 대한 요청을 대기열에 넣습니다.

성능에 미치는 영향

포트 대기열이 가득 차면 운영 체제는 추가 수신을 제한합니다. 사이. 결과적으로 클라이언트에 연결 실패 또는 시간 초과가 발생할 수 있습니다.

문제 완화

문제를 완화하려면 다음 옵션을 고려하십시오.

  • HTTP/1.1 또는 Keepalive 사용(ApacheBench 포함): ApacheBench는 제공 HTTP/1.1 keepalive를 활성화하는 -k 옵션. 이를 통해 도구의 동시성 설정에 따라 연결을 재사용하여 포트 소비를 줄일 수 있습니다.
  • Keepalive와 함께 부하 생성기 사용: wrk와 같은 다른 부하 생성기는 HTTP/1.1을 지원합니다. 즉시 사용 가능한 Keepalive 기능도 있습니다. 이러한 도구를 사용하면 수동 연결 유지 구성이 필요하지 않습니다.
  • 서버 성능 최적화(선택 사항): 서버 코드는 최소한의 작업을 수행하지만 이를 최적화하면 전반적인 성능이 향상되고 서버에 대한 로드가 줄어들 수 있습니다. 부하 생성기 및 운영 체제. 의미 있는 작업을 서버 코드에 통합하는 것을 고려해 보세요.

위 내용은 My Go HTTP 서버가 'Connection Refused' 또는 'Operation Timed Out' 오류와 함께 ApacheBench 테스트에 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿