일반적으로, 더 나은 최대 스레드의 합리적인 제한과 톰캣 REST 서비스를 구성하거나 그것이 효과적으로 무한한 값으로 설정되어 있습니까?

데이비드 M. 카 :

이 이것에 대한 하나의 대답은 아니지만, 나는이 질문을 다른 어디 모른다.

컨테이너에서 실행 REST 서비스를 실행하는 Tomcat을 사용하는 대규모 엔터프라이즈 시스템에 I의 작업은,는 Kubernetes에 의해 관리.

톰캣, 또는 정말 모든 요청 프로세서는, 생성 된 스레드에 도달 수가 정의 된 제한, 그것은 (대기열에 추가 요청을 넣어 것입니다 경우 충분한 요청, 많은 스레드의 원인 창출에 오면하도록하는 "최대 스레드"속성이 있습니다 다른 속성의 값)으로 제한하고, 그 큐가 가득 찬 후에 다음 아마도 요청은 거부 될 것이다.

그것은이 속성이 가능하게 도달 할 수있다, 또는 그것이 효과가 무한대로 설정할지 여부를 값으로 설정할지 여부를 고려하는 것이 합리적이다.

트래픽이 실제 고객 트래픽 또는 악성 DDOS 트래픽에서 중, 정상보다 매우 높을 때 유일한 재미있는 사람이 있지만 고려해야 할 여러 시나리오가 있습니다.

컨테이너 관리 환경 및 기타 유사한 경우에, 이것은 또한 인스턴스, 포드, 또는 컨테이너 서비스의 복사본을 실행되어야하는 질문을 구걸한다. 난 당신이 각각의 용기에 스레드의 평균 수를 증가시킬 것입니다 각 포드에 대한 자원의 중복을 줄일 수 있지만, 위해 내가 더 잘 세트에 걸쳐 얇게을 확산보다 더 있다고 가정 것이다 가능한 한 이들 중 몇 가지로해야 할 것입니다 가정 것 용기.

우리 팀의 일부 회원들은 효과가 무한대에 "최대 스레드"속성을 설정하는 것이 좋습니다 생각합니다.

이에 대한 몇 가지 합리적인 생각은 무엇입니까?

데이비드 미로 :

일반적으로, 나는 (쉽게 여러 호스트에 예약 할 수 있습니다) 더 포드를 실행하기보다는 더 많은 스레드를 실행하여 규모에 노력하고 건의 할 것입니다. 또한 일정 1 16 코어 포드보다 일정 16 일 코어 포드에 클러스터 쉽다.

스레드 수의 관점에서, 그것은 당신의 프로세스가 어떻게하고 있는지 많은 일에 조금 따라 달라집니다. 자주 50 개 또는 100 스레드를 실행하도록 설정되어 있지만 여전히 1.0 CPU의 한계로, 효과적으로 자원을 사용할 수 있도록 일반적인 웹 응용 프로그램, 데이터베이스 이야기 대부분의 시간을 보낸다, 지역 계산의 조금 않습니다. 매우 계산 - 무거운 경우 CPU 당 하나 개의 스레드로 제한 될 수 있습니다 (이것은 실제 이미지 처리 또는 기계 학습 일, 말을하고있어). 프로세스가 16 개 스레드를 할당된다 나쁜 경우가 있지만, 시스템이 실제로 프로세스가 스로틀 얻을 것이다 경우에 가능한 4 개의 코어를 가지고 있지만 당신이 정말로 그것을 확장하고자합니다.

채우고 스레드 풀은의 다른 중요한 나쁜 상태를 알고 있어야합니다. 만약 그렇다면 당신이 참고로, 요청은 대기열에 얻을 것이다,하지만, 이러한 요청 중 일부는 Kubernetes 건강 검사 프로브 경우, 그 건강에 해로운 같은 서비스를 기록 클러스터가 발생할 수 있습니다. 이 사실은 (는 건강 검진 즉시 응답하지 있기 때문에)의 부하도 과부하 정지 상태 검사에 응답하게 다른 복제, 전송됩니다, 그래서 과부하 복제가 죽였됩니다 나쁜 나선형으로 이어질 수 있습니다. 당신은 더 포드, 이상의 스레드를 실행하여이 문제를 피할 수 있습니다. (... 또는 런타임에서 응용 프로그램을 다시 작성하여이 같은 고정 된 상단 용량을하지 않는다.)

또한 대한 가치가 독서의 수평 포드 autoscaler가 있습니다 .BREAK . 당신은 몇 가지 통계 연결할 수 있으면 (CPU 사용률, 스레드 풀 카운트), 후는 Kubernetes가 자동으로 당신을 위해 더 만들 수 있습니다 "나는 더 포드가 필요합니다"라고하고, 그들이 필요하지 않을 때 그들을 확장 할 수 있습니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=363572&siteId=1