친애하는 마스터 여러분, 제 nginx는 Proxy_pass를 통해 tomcat을 조정하지만 tomcat이 간헐적으로 경련(fullgc)을 하여 약 7-8초 정도 시간 초과가 발생합니다
1초처럼 처음 요청할 때 시간 초과를 설정하는 방법을 생각해 냈습니다. 시간이 초과되면 다시 요청하세요(머신 변경)
그 다음에는 다음과 같은 nginx 구성이 있습니다. (다음은 Tomcat의 fullgc를 시뮬레이션하기 위해 플라스크의 절전 모드를 사용하는 것입니다.)
으아아아8088과 8089의 서비스는 제가 직접 작성한 모의 서비스입니다
8088은 2초 동안 직접 절전 모드로 전환되어 nginx가 시간 초과됩니다
8089는 "hello world"인 200
내 기대는
명령줄을 사용하여 8087을 반복적으로 요청하면 "hello world"가 항상 반환됩니다. 일부 요청은 더 빠르고 일부는 느립니다(시간 초과 요청 후 요청이 다시 요청되기 때문에 1초 이상)curl
요청이 1초를 초과하면 8087은 바로 504 오류를 반환합니다
nginx 배경 로그 보기:
3개의 시간 초과 기록이 지속적으로 인쇄되었습니다:
하지만 8088(수면 서비스)은 단 한 번의 요청만 받았습니다(몇 가지 사소한 예외, 플라스크에 기록됨)
그런 다음 Wireshark를 사용하여 패킷을 캡처하고 알아냈습니다
저를 도와주실 수 있나요?
내 구성에 문제가 있는 걸까요??
Tomcat fullgc 시간 초과 문제에 대한 다른 좋은 해결책이 있다면 저도 매우 감사하겠습니다~
한 번 시도해 보라고 요청하시면 nginx가 한 번 시도합니다.
시도와 재시도는 다릅니다. Proxy_next_upstream_tries 2;를 사용해 보세요. 게다가,proxy_next_upstream_timeout의 의미를 잘못 이해하신 것 같습니다. 그것도 제거하세요.