톰캣 8.0 동시 최적화 - server.xml의 구성을 최적화

설정 파라미터를 설정하기 때문에, 높은 동시성에서 노출 될 수있는 다양한 문제, 메모리, 네트워크 및 기타 문제에 매우 중요 이어질 수 너무 높게 설정하면 톰캣 동시성 밀접 구성 충분한 동시 기계 수백의 평균 량과 관련 .

작업 1 개 Tomcat의 세 가지 모드

1.1 BIO - 동기 차단 IO 모드

BIO, 어떤 최적화를 지원하지 않고, IO, 낮은 성능을 차단하는 동기.

클라이언트가 연결이 물론 스레드의 불필요한 오버 헤드를 유발하기 위해 아무것도하지 않는 경우 연결 요청에 의해, 처리를 위해 스레드를 시작해야 할 서버가 해당 서버 모델은 연결 스레드를 달성하기 위해  스레드 풀  메커니즘을 향상시킬 수 있습니다.

해당 장면 : BIO 방법은이 방법이 상대적으로 높은 서버 리소스 요구 사항, 동시성 제한, JDK1.4 이전의 유일한 옵션, 연결 및 고정 인프라의 상대적으로 적은 수에 적용 할 수있다.

1.2 NIO - 동기 비 차단 IO 모드

자바 SE 1.4 따라서도 NIO 자바 NIO 완충액에 기초한다. 새로운 IO 및 동작의 최신 버전 (즉 java.nio의 패키지와 그 서브 패킷)이며, 비 차단 IO 동작 자바 API를 제공 할 수 있으며, 약칭하는 비 차단 IO를, 그것이 종래의 복잡한 동작 BIO보다 나은 성능을 갖는다 (IO 비 차단).

요청 서버 즉, 클라이언트에 의해 전송 된 접속 요청은 멀티플렉서 등록 스레드 모드를 구현하며, 상기 멀티플렉서는 쓰레드 IO 요구 처리를 시작 폴링에 접속된다.

응용 시나리오 : 이와 같이 애플리케이션에 한정 채팅 서버 동시성, 더욱 복잡한 프로그램과 더 연결 및 연결 단시간 (라이트 동작) 아키텍처 용.

현재 톰캣 8.x의 기본 NIO 모드에서 실행.

1.3 4월 - 휴대용 런타임 패턴

(APR 아파치 휴대용 런타임, 아파치 휴대용 런타임), 아파치 HTTP 서버 API 세트를 제공하는 지원 라이브러리, 운영 체제가 특정 기능을 지원하지 않을 경우, 4 월 도서관. 따라서, 시뮬레이션을 제공 할 것입니다, 기본 운영 체제에 매핑된다 개발자들은 진정으로 프로그램 플랫폼간에 만들기 위해 APR을 사용할 수 있습니다.

이 모드는 더 복잡한 설치 단계이지만, 애플리케이션 성능을 크게 향상시킬 수, 운영 체제 수준에서 비동기 IO의 문제를 해결한다.

사월은 사전에 필요한 의존성 후속 설명한다 설치해야합니다, JNI를 사용하여 기술의 본질은 기본 운영 체제 IO 인터페이스를 호출합니다.

2 톰캣 동시 구성 (커넥터)

톰캣 커넥터 키 모듈 IO 처리 모드가 커넥터, HTTP 및 기타 일반적으로 사용하는 전략에 의해 수신 된 요청을 처리 스레드의 수를 지정하는 지정 될 수 있으며, HTTP 요청을 수신한다.

경로 구성 : 입력  ${TOMCAT_HOME}/conf/server.xml 노드의 구성 파일.

요청을 처리 2.1 스레드 풀

따라서 톰캣 요청 처리 능력을 향상, 적은 수의 스레드 자원으로 더 많은 요청을 처리하기 위해 스레드 풀을 사용합니다.

전제 : 요청, 구성 파일을 처리하기 위해 적어도 스레드 풀을 미리 구성하려면 ${TOMCAT_HOME}/conf/server.xml.

커넥터 실행 프로그램과 동일한 레벨은 요청 된 복수의 커넥터 스레드 풀을 처리하는 데 사용할 수있는 방법.

(1) 참조 기본 연결 풀 구성 :

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/>

(2) 사용자 정의 스레드 풀 예 :

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="200" minSpareThreads="10" maxIdleTime="600000" prestartminSpareThreads="true" maxQueueSize="100" /> 

(3) 스레드 풀 매개 변수 :

name: 스레드 풀 이름입니다.
namePrefix: 각 스레드에 대한 이름 접두사는 별도의 스레드 이름을 생성 +의 ThreadNumber는 namePrefix.
maxThreads: 스레드 풀에서 동시 스레드의 최대 수는, 디폴트는 서버 및 구성하는 따라 400-800를 설정하는 것이 좋습니다, 200 비즈니스 요구.
minSpareThreads: 스레드의 핵심 번호 활성 스레드의 최소 수, 파괴되지 않습니다 항상 존재합니다.
prestartminSpareThreads: 프로그램을 시작할 때입니다 시작하도록 설정되어 있지 않은 경우 즉, 기본값은 false입니다, minSpareThreads 스레드를 생성합니다. . 사실, 다음 세트가 minSpareThreads 작동하지 않습니다
maxIdleTime: 최대 유휴 시간을 스레드,이 시간 이후, 유휴 스레드가 파괴되고, 기본값은 6000 밀리 초입니다.
maxQueueSize: 큐의 최대 수는 요청이 거부 초과합니다. 디폴트 값은 무한대에 상당 int 타입 (는 Integer.MAX_VALUE)의 최대 값은 일반적으로 처리 할 수없는 요청의 일부를 피하기 위하여, 변형이 발생되지 않을 것이다.
threadPriority: 스레드 풀의 우선 순위 쓰레드는, 디폴트 값이 5 값 범위 : 1 ~ 10
className: 구현 스레드 풀 클래스의 경우이 지정되지는 기본 구현 클래스  org.apache.catalina.core.StandardThreadExecutor사용자 지정 스레드 풀에 대한 구현해야합니다.  org.apache.catalina.Executor 인터페이스.

커넥터에서 스레드 풀의 2.2 사용

톰캣 커넥터는 요청이 각 커넥터의 입구는 고유의 수신 대기 포트를 가지고있다받습니다.

  <Connector executor="tomcatThreadPool" 
             port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

(1) 커넥터 파라미터 설명 :

redirectPort="8443" #의 경우, 같은 클라이언트의 요청이 프로토콜은 HTTPS 때,이 포트에 요청을 전달하는 경우 등 필요에 따라 보안 채널을, 포트를 SSL을 기반.

minSpareThreads="25" # 톰캣의 유휴 스레드 소켓 커넥터의 최소 수,이 유휴 스레드 없으며 maxThreads보다가, 유휴 스레드의 수가이 값은 Tomcat이 초기화 될 때 생성 된 스레드의 수는 한 번 작성 될 경우 기본값은 25입니다.

maxSpareThreads="75" 유휴 스레드 # 최대 수는 쓰레드 생성 한 번이 값을 초과, Tomcat은 더 이상 필요 소켓 스레드 종료 것, (50)의 기본값 스레드 수 있습니다 거의 동시 사용자 수, 초당 사용자 작업의 수, 평균 운영 체제 "로 계산하는 시간 ".

keepAliveTimeout="6000" 다음 요청의 도착하기 전에 #은 Tomcat이 연결 6000ms를 유지한다.

maxKeepAliveRequests="10" . 연결 번호로 지원 요청의 최대 수는, 연결 수가 요청도 (이 경우에는 연결 반환 클라이언트에 가까운 헤더를) 해제됩니다 초과 연결 -1의 수를 제한하지, 긴 연결을 사용하지 않습니다, 디폴트 값은 (100, 200) 사이에 일반적으로 배치, 100이다.

acceptorThreadCount="1" 서버는 일반적으로 멀티 코어 CPU, 2에 구성을 변경할 필요가있는 경우 연결을 수신 스레드 # 번호, 기본값은 1입니다.

enableLookups="false" # (즉, DNS 해상도) 역방향 조회 도메인 이름을 지원할지 여부, 기본값은 true입니다. 처리 능력을 향상시키기 위해, false로 설정해야합니다.

disableUploadTimeout="true" 업로드 할 때 # 시간 제한 메커니즘은 그것이 사실 인 경우, 업로드 시간 제한을 비활성화, 활성화됩니다.

connectionTimeout="20000" # 네트워크 연결 시간은 결코 0로 설정 기본 값 20000ms이 만료 - 숨겨진 30000ms의 존재는 일반적으로 설정합니다.

URIEncoding="UTF-8" #의 URL 인코딩 형식으로 Tomcat 컨테이너를 지정합니다.

maxHttpHeaderSize="8192" 최대한 도로 #의 HTTP 요청 헤더는 구성 요소의 길이는 일반적으로 8K 설정 될 수있는이 프로세스를 초과하지 않는다.

maxPostSize="10485760" # POST 요청의 내용이 바이트의 크기를 지정, 2097152 (2메가바이트), 중 10M에 10,485,760의 기본 크기는. 제한을 해제하려면 -1로 설정 될 수 있습니다.

compression="on" 압축 함수 번호 전송 열기.

compressionMinSize="10240" # 압축 된 내용의 출력 크기를 사용, 기본값은 2048 2킬로바이트입니다.

noCompressionUserAgents="gozilla, traviata" # 압축이되지 않은 설정 브라우저를 사용 가능

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 압축 자원 유형

(2) 추가 정보 :

① 클라이언트 후 톰캣 압축은 서버가 서버의 리소스 파일 압축에서 자원에 해당하는 다음 클라이언트의 브라우저에 의해 클라이언트에 출력을 압축 해제하고 검색을 담당 요청합니다. 일반적인 검색 과정을 (예를 들어, HTML 존중을 검색, CSS, 자바 스크립트 및 텍스트)는 트래픽의 약 40 %를 절약 할 수 있습니다. 더 중요한 것은, 그것은 또한 CGI, PHP, JSP, ASP, 서블릿, SHTML 등)을 포함하여 (동적으로 생성 된 웹 페이지를 압축 할 수 있습니다.

압축이 부담 톰캣, 최고의 사용의 Nginx + 톰캣이나 아파치 + 톰캣 방법은 server.xml에서 노드 구성을 (아직 사용하여 검증되지 않음) 완료 Nginx에 / 아파치에 넘겨 압축을 증가합니다 ② :

  • <Service name="Catalina" /> --- Tomcat 서버에 의해 직접 수신하는 모든 웹 클라이언트 요청을 처리합니다.
  • <Service name="Apache" /> --- Apahce 서버에 의해 전달 된 모든 웹 클라이언트 요청을 통해 처리합니다.
  • <Service name="Nginx" /> --- Nginx의 서버에 의해 전달 된 모든 웹 클라이언트 요청을 통해 처리합니다.

2.2 NIO 모드 처리 요구

(1) 기본 구성 - BlockingIO 모델 :

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

NIO (2) 설명 :

  • 각 웹 클라이언트 요청은 서버에 대한 별도의 스레드, 클라이언트 수의 증가, 또한, 스레드의 전환에 더 많은 시간을 소비 할 것이다 CPU에 증가하는 서버 측 처리 스레드의 수를 요구한다. 스레드 풀 요청에 막힌 파이프 또는 큐를 처리하는 동안 NIO는, 단일 스레드 (단일 CPU) 또는 소켓을 수용 스레드의 단지 소수 (멀티 CPU) 이상을 사용하고 있습니다.이 경우, 한 OS가 TCP 연결을 받아 들일 수 있으므로, 크게 웹 서버의 확장 성을 향상 - 웹 서버가 요청을 처리 할 수 ​​있습니다.
  • 톰캣 NIO2를 사용한 경우 8, 즉  org.apache.coyote.http11.Http11Nio2Protocol 더.
  • 톰캣 6, 7에서, 즉 NIO 사용하는  org.apache.coyote.http11.Http11NioProtocol 더 나은.

(3) NIO 모델 구성 :

<Connector executor="tomcatThreadPool" 
           port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" maxPostSize="10485760" acceptorThreadCount="2" />

(4) 매개 변수 :

executor="..."  # 连接器使用的线程池名称. 
port="..."      # 连接端口, URL中指定此端口进行访问.  
protocol="..."  # 连接器使用的请求处理模式.  
redirectPort="8443"   # 基于SSL的端口, 在需要基于安全通道的场合, 比如当客户端的请求协议是HTTPS时, 将该请求转发到此8443端口. 

2.3 4월 모드 처리 요구

단순히 4 월 모드로 이해 될 수있다, Tomcat은 이에 크게 톰캣 정적 파일의 처리 성능을 향상 읽거나 네트워크 전송 작업 파일의 형태로 핵심 동적 링크 라이브러리 JNI 아파치 HTTP 서버를 호출합니다.

사월 톰캣 높은 동시에 애플리케이션을 실행하는 바람직한 모드와 송신 모드는 HTTPS를 사용하는 경우, SSL은 또한 처리 성능을 향상시킬 수있다.

이미 언급 한 바와 같이, 4 월 모델은 기본 운영 체제 IO 인터페이스를 호출, 그래서 필요한 의존성을 설치해야합니다.

(1) 설치 OpenSSL을 :

설치 명령은 다음과 같습니다 :

yum -y install openssl-devel

(2) 설치 4 월 구성 요소 :

  • 설치 4월과 4 월의 util 패키지를 다운로드 : 한 단계
    다운로드 :  http://apr.apache.org/download.cgi 여기가 다운로드 apr-1.6.3.tar.gzapr-util-1.6.1.tar.gz업로드 서버에 업로드 패키지 다음 설치  /usr/local 디렉토리를.

  • 2 단계 : 4월를 설치합니다 :

    cd /usr/local
    tar -zxf apr-1.6.3.tar.gz
    cd apr-1.6.3
    # 配置安装路径
    ./configure --prefix=/usr/local/apr
    # 编译安装
    make
    make install
  • 3 단계 : 4 월 폴더의 유틸리티를 설치합니다 :

    cd /usr/local
    tar -zxf apr-util-1.6.1.tar.gz
    cd apr-util-1.6.1
    # 配置安装路径
    ./configure --prefix=/usr/local/apr-util--with-apr=/usr/local/apr
    # 编译安装
    make
    make install

    오류 메시지 :

    GCC는에 의해 종속 오류가 발생할 수 있습니다 설치되어 있지  yum install gcc 설치 명령.

    : 당신이 과정에서 실수를 한 경우, 정리를 수행 할 필요가 다시 설치하기 전에 오류를 해결  make clean한 후 시도하고 프로세스를 다시 설치할 수 있도록합니다.

    당신이 던질 경우  xml/apr_xml.c:35:19: error: expat.h: No such file or directory, 해외 거주자 라이브러리의 부족을 나타내는, 설치 하위 명령을 실행 가능 :  yum install expat-devel.

  • 네 단계 : 환경 변수를 구성합니다 :

    설치가 상기 환경 변수 하에서 제공되면 :
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

    또한, 패키지에 / usr / 지방 / 4월가 / lib 디렉토리는 /etc/ld.so.conf 파일 경로를 추가 :
    echo "/usr/local/apr/lib" >> /etc/ld.so.conf

(3) 톰캣 네이티브 구성 요소를 설치 :

tomcat-native구성 요소는 4 월 상호 작용 톰캣의 중간 부분으로 볼 수있다.

  • 한 단계 : 다운로드 및 기본 설치 패키지를 추출 :

    이동  ${TOMCAT_HOME}/bin 또한 공식 웹 사이트 (디렉토리로 갈 수있는, 바람둥이-native.tar.gz을 찾을 http://tomcat.apache.org/download-native.cgi) 다른 버전을 다운로드 , 더 큰 호환성이 온다 톰캣의 버전을 사용하는 것이 좋습니다 보증.

    톰캣 네이티브 압축 해제 조립 및 설치하거나 그 나라의 구성 요소가 서버에 다운로드 업로드, 다음 절차를 실행합니다 :

     cd /usr/local/tomcat/bin/
     tar -zxf tomcat-native.tar.gz
     cd tomcat-native-1.2.14-src/native/

    주 : 디렉토리의 버젼 1.1.x는 바람둥이 네이티브-1.1.x의-SRC / JNI / 기본입니다.

  • 2 단계 : 설치 구성 요소 :

    # 配置安装参数, 其中java-home可使用默认环境变量中的配置
    ./configure --with-apr=/usr/local/apr --with-ssl=yes
    make
    make install

(4) 톰캣 통합 4월 :

  • 단계 : 시작 스크립트를 수정 catalina.sh:  파일   전에 다음 시작 매개 변수 (약 110 라인) 추가됩니다
    ${TOMCAT_HOME}/bin/catalina.shcygwin=false

    JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
  • 두 단계 : 컨테이너 구성 server.xml 파일을 수정합니다 :

    보기  ${TOMCAT_HOME}/conf/server.xml 다음과 같이 청취자 댓글을 달았하지 않도록 문서를 :

    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  • 커넥터 옵션을 수정 :

    <Connector port="8443" 
                protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" > </Connector>

(5) 확인 구성이 성공적으로 :

Tomcat을 시작,에서  ${TOMCAT_HOME}/logs/catalina.out 보기 로그 파일 정보 :

  • 다음의 내용은 설치 실패 4 월 구성 요소를 나타내는 발생하는 경우 :

    Sep 14, 2018 19:11:20 PM org.apache.catalina.core.AprLifecycleListener init 
    INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:...
  • 다음의 내용이 발생하면, 성공적인 설치 지침은 구성 요소를 APR :

    Sep 14, 2018 19:19:47 PM org.apache.catalina.core.AprLifecycleListener init
    INFO: Loaded APR based Apache Tomcat Native library 1.1.27 using APR version 1.6.3.
    Sep 14, 2018 19:19:47 PM org.apache.catalina.core.AprLifecycleListener init
    INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
    Sep 14, 2018 19:19:47 PM org.apache.catalina.core.AprLifecycleListener initializeSSL
    INFO: OpenSSL successfully initialized (OpenSSL 1.0.1e-fips 11 Feb 2013)
    Sep 14, 2018 19:19:47 PM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["http-apr-8080"]
    Sep 14, 2018 19:19:47 PM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["ajp-apr-8009"]
  • 성공적인 출시로 톰캣 4 월 모드 :

    Sep 14, 2018 19:19:56 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-apr-8986"]
    Sep 14, 2018 19:19:56 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["ajp-apr-8915"]
    Sep 14, 2018 19:19:56 PM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 9421 ms

3 AJP 커넥터 구성

HTTP 서버와 톰캣 사용자 정의 프로토콜 사이의 통신을위한 AJP (아파치 JServer 프로토콜), 높은 통신 속도와 효율성을 제공 할 수 있습니다.

그리고 케이스 설명 : 웹 서버는 AJP의 V13 프로토콜 패킷 지향, 웹 서버 및 고가의 소켓 생성의 비용을 절약하기 위해, TCP 연결을 통해 상호 작용하는 서블릿 컨테이너를 서블릿 컨테이너에 영구적 인 TCP 연결을 유지하기 위해 노력, 그리고 더 많은 요청합니다 그것은 응답 기간의 과정과 TCP 연결을 다시 사용합니다.

아파치 아키텍처 경우, AJP 커넥터는이 포트의 포트 번호로 요청에 의해 지정된 구성에서 아파치 수신 동적 페이지 요청, AJP 커넥터 어셈블리를 듣고 할 때, 사용하는 것이 필요하다.

톰캣 + 아파치를 사용하지 않는 경우,하지만 같은 톰캣 + Nginx와 같은 다른 아키텍처로, 당신은 커넥터에서 로그 아웃해야합니다.

<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  -->

추천

출처www.cnblogs.com/jtlgb/p/10985688.html