톰캣 스레드 풀의 이해

기사 디렉토리

1 스레드 풀은 이해하기

기본 구성에서 Tomcat각 커넥터에 대한 바인딩 스레드 풀을 생성한다 ( 最大线程数:200). 대부분의 경우 (스레드 증가의 최대 수는 높은 부하의 요구를 충족하지 않는 한)이 구성을 변경할 필요가 없습니다. 하지만 Tomcat모든 작업자 스레드처럼 thread-local같은 맥락으로, 일부를 캐시 PageContext및 레이블 캐시 된 개체.

이러한 이유로, 희망이있을 것입니다 Tomcat경우에 따라 메모리의 실을 청소하기 위해 해제 할 수 있습니다. 또, 각 커넥터 (세트 서버의 능력에 따라, 그 후, 자신의 스레드 풀을 유지하고 线程数높은 값이 더 어려워 질 것이다). 이 문제에 대한 해결책은을 사용하는 것입니다 共享执行器.

모두가 같은 커넥터를 사용함으로써 共享执行器, 당신은 구성에 따라 수행 할 수 있습니다 전체 응용 프로그램의 동시 기대의 최대 번호를 요청할 수 있습니다. 액추에이터는 또한 확장 된 여가 시간 스레드 풀은 바쁜 축소 할 수 있습니다. 이론적으로 적어도, 이것은이다 ...
org.apache.catalina.core.StandardThreadExecutor

Tomcat사용되는 기본 표준은, 액츄에이터가 내장되어 있습니다 StandardThreadExecutor.

구성 문서 액세스 : HTTP : //tomcat.apache.org/tomcat-6.0-doc/config/executor.html.

이 구성 옵션은, 거기에 잘못된 매개 변수입니다 maxIdleTime여기에, 표준 및 유휴 스레드에서 폐쇄 몇 가지 알 필요가 있습니다.
표준은 내부적으로 사용하는 액츄에이터 java.util.concurrent.ThreadPoolExecutor. 스레드가 작업을 완료하면 그것은 작업자 스레드 풀 작업의 크기에 의해 변수를 가지고, 그것은 앞으로 새 작업 때까지 블록 큐 기다립니다. 아니면 다음 "타임 아웃", 스레드가 종료됩니다 것, 설정된 시간이 될 때까지 기다립니다. 핵심은 여기에 먼저 할당 할 새 작업이 스레드 풀은 FIFO (준수하는 작업 스레드 완료하는 첫 번째 쪽 FIFO) 모드. 그것이 어떤 영향을 미치는지의 검토시 Tomcat액츄에이터를 우리는 항상이주의를 지불해야 할 때.

maxIdleTime사실 minIdleTime
때문에 Java ThreadPoolExecutorFIFO최소 대기 전에 행동, 각 스레드는 폐쇄 될 수 maxIdleTime시간이 새 작업을 수용 할 수 있습니다. 또한, 인해 스레드 풀에 FIFO행동, 유휴 스레드를 입력하는 첫번째 때문에이이 적어도 기다려야합니다 닫혀 그렇게하기 전에, 새로운 작업 우선 순위를 할당됩니다 maxIdleTime요청 입장에 어떤 시간이 아니다. 이 효과는이 크기의 전개 속도를 더 요구받는 것, 스레드 풀의 평균 하중 (동시 요청)에 대한 액츄에이터의 크기를 설정하는 것은 불가능하다. 그것은 아무것도 다른 것처럼 보이지만 위해 web서버에 관한 한, 영향은 상당한 될 수 있습니다.

예를 들어, 같은 시간 요청에 40왔다. 스레드 풀은 부하를 수용하기 위해 40로 확장됩니다. 동시에, 기간 후 바로 요청에 들어갔다. 하자 각 요청의 끝 부분의 구현 시간의 다음 시대에, 다시 수행하기 위해 전체 스레드 풀 스레드를 넣어 20 초 소요 수단 (500) MS, (기억을 필요로 말한다 FIFO). 당신이 20 초 이하로 maxIdleTime 세트를 넣어하지 않는 한 다른 스레드 풀은 항상 당신이 결코 이상의 동시 금액없는 경우에도, 40 개 스레드를 개최한다. 그러나 당신은 또한 당신의 maxIdleTime 세트의 너무 작은 원하지 않는다 -이 너무 빨리의 결과는 스레드가 닫혀 직면 할 위험이 있습니다.

결론
평균 로딩보다는 들어오는 요청의 비율을 일치시키기 위하여는,이 스레드 풀 동작을 수득 할 것으로 예상 될 수 있고, 더욱 적절한 액츄에이터 (A)에 기초한다이다 后进先出( LIFO) 모드. 스레드 풀은 작업의 할당에 우선 순위를 입력 대기 유휴 스레드를 최소화 할 수있는 경우, 서버는 낮은 부하 단계에서 (보다 예측 방식에) 더 가까운 실 수있을 것입니다. 간단한 정도로는, 일정 시간 후에 부하 (40)의 초기 하중이 1로 유지되도록 상기 예에서, LIFO스레드 풀 수있을 maxIdleTime합리적 단계 후 1 크기를 조절한다. 물론, 항상 당신이이 전략을 사용할 필요가 없습니다, 그러나 당신의 목표는 Tomcat에서 개최되는 리소스를 최소화하는 경우, 불행하게도, 당신이를 기대하지 않을 수 있습니다 표준 액추에이터이다.
참고 링크 :
리눅스, 균형 여러 부하 아파치 톰캣 클러스터
해결 균형 Nginx에 톰캣 클러스터 부하를
또한 mod_jk와 mod_proxy를 역방향 프록시 및 부하를 사용하여 + Nginx에 리버스 프록시 톰캣 + 아파치가 균형 구성 요소 설치 톰캣 예를 들어 설명을
위해 rsyslog + Log Analyzer에 +를 사용에 CentOS 6.5에서 서버 배포를 기록 MYSQL

게시 된 334 개 원래 기사 · 원 찬양 186 · 전망 310 000 +

추천

출처blog.csdn.net/u012060033/article/details/103804009