>  Q&A  >  본문

시간 초과를 방지하기 위해 Tomcat이 GC 전에 nginx 업스트림에서 자동으로 제거되도록 만드는 방법은 무엇입니까?

Tomcat은 가끔씩 fullgc를 수행합니다. 이때 nginx가 요청을 보내면 요청 시간이 초과됩니다.

한 가지 해결책은 nginx 측에서 더 짧은 시간 초과를 설정하는 것입니다. 응답이 없으면 시스템을 변경하여 요청을 다시 보내십시오. 그러나 문제는 이 요청이 부작용이며 다시 발생하는 것이 허용되지 않는다는 것입니다.

묻고 싶습니다. nginx가 gc 전에 tomcat을 자동으로 제거하고 gc가 완료된 후에 자동으로 다시 추가하는 메커니즘이 있나요?

간단히 말하면 tomcat gc로 인한 타임아웃 영향을 피하기 위함입니다~

PS:

nginx의 업스트림은 여러 Tomcat으로 설정되어 있습니다. 한 시스템에서 GC가 발생하는 한 이 시스템에 대한 모든 요청은 시간 초과됩니다.

为情所困为情所困2736일 전639

모든 응답(1)나는 대답할 것이다

  • 淡淡烟草味

    淡淡烟草味2017-05-16 17:23:13

    Tomcat에는 메모리 오버플로를 방지하는 리스너가 있습니다:

    으아악

    System.gc() 조정으로 인해 발생한 것으로 의심됩니다. 이 GC는 stop the world 메서드를 사용하고 있을 수 있습니다. 즉, 비동시적임을 의미합니다. 다음 두 가지 옵션을 시도해 볼 수 있습니다.

    1.-XX:+ExplicitGCInvokesConcurrent 동시 GC
    2. 리스너를 비활성화하거나 JVM 수준에서 직접 호출을 비활성화합니다. -XX:+DisableExplicitGC

    그럼 잠시 관찰해 보세요.

    회신하다
    0
  • 취소회신하다