Worker MPM(Multi-Processing Module)은 하이브리드 다중 프로세스 다중 스레드 서버를 구현합니다.
스레드를 사용하여 요청을 처리하면 프로세스 기반 서버보다 적은 시스템 자원으로 많은 수의 요청을 처리 할 수 있습니다. 그러나 각각 스레드가 많은 여러 프로세스를 사용 가능하게하여 프로세스 기반 서버의 안정성을 크게 유지합니다.
이 MPM을 제어하는데 사용되는 가장 중요한 지시문 ThreadsPerChild은 각 하위 프로세스에서 배포되는 스레드 수 MaxRequestWorkers를 제어하고, 시작될 수있는 최대 총 스레드 수를 제어합니다.
단일 제어 프로세스 (부모)는 자식 프로세스를 시작합니다.
각 하위 프로세스는 ThreadsPerChild 지시문에 지정된 대로 고정된 수의 서버 스레드와 연결을 수신하고, 서버 스레드에 전달하여 도착할 때 처리하도록 리스너 스레드를 작성합니다.
Apache HTTP Server는 항상 들어오는 요청을 처리 할 수있는 예비 또는 유휴 서버 스레드 풀을 유지하려고 합니다.
이러한 방식으로 클라이언트는 요청을 처리하기 전에 새 스레드 또는 프로세스가 작성 될 때까지 기다릴 필요가 없습니다.
처음 시작할 프로세스 수는 StartServers 지시문에 의해 설정됩니다.
구동하는 동안 서버는 모든 프로세스에서 총 유휴 스레드 수를 할당하고, MinSpareThreads 및 MaxSpareThreads에 의해 지정된 범위 내에서 이 숫자를 유지하기 위해 프로세스를 fork 또는 종료합니다.
이 프로세스는 자체적으로 조정되므로 이러한 지시문을 기본값에서 수정할 필요가 거의 없습니다.
동시에 제공 될 수있는 최대 클라이언트 수 (즉, 모든 프로세스에서 최대 총 스레드 수)는 MaxRequestWorkers지시문에 의해 결정됩니다. 최대 활성 자식 프로세스 수는 MaxRequestWorkers 지시문을 ThreadsPerChild 지시문으로 나눈 값으로 결정됩니다.
두 개의 지시문은 활성 자식 프로세스 수와 자식 프로세스의 서버 스레드 수에 대한 제한을 설정하며 서버를 완전히 중지 한 다음 다시 시작해야만 변경할 수 있습니다.
ServerLimit는 활성 자식 프로세스 수에 대한 하드 제한이며 MaxRequestWorkers 지시문을 ThreadsPerChild 지시문으로 나눈 값보다 크거나 같아야합니다. ThreadLimit는 서버 스레드 수의 하드 한계이며 ThreadsPerChild 지시문보다 크거나 같아야합니다.
활성 하위 프로세스 세트 외에도 종료되는 추가 하위 프로세스가있을 수 있지만 하나 이상의 서버 스레드가 여전히 기존 클라이언트 연결을 처리하고 있습니다. 실제 프로세스는 훨씬 더 작을 것으로 예상되지만 MaxRequestWorkers까지 프로세스를 종료 할 수 있습니다. 이 동작은 개별 하위 프로세스의 종료를 비활성화하여 피할 수 있습니다.
- MaxConnectionsPerChild의 값을 0으로 설정
- MaxSpareThreads의 값을 MaxRequestWorkers와 동일한 값으로 설정
작업자 MPM에서 프로세스 스레드 컨트롤의 일반적인 구성은 다음과 같습니다.
ServerLimit 16
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
Worker MPM에서 기본 설정값은 다음과 같습니다.
ServerLimit 16
StartServer 3
MaxRequestWorkers 400 # ServerLimit * ThreadsPerChild
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
ThreedLimit 64
※ MaxClients : Apache 2.3.13 버전 이전에 불리었고, 현재는 MaxRequestWorkers로 불림
하지만 현재도 해당 설정값은 지원이 되고 있음
상위 프로세스는 일반적으로 포트 80에 바인딩하기 위해 Unix에서 루트로 시작되지만 하위 프로세스 및 스레드는 권한이 적은 사용자로 서버에 의해 시작됩니다. User 및 Group 지시문은 Apache HTTP Server 하위 프로세스의 권한을 설정하는 데 사용됩니다. 자식 프로세스는 제공 될 모든 내용을 읽을 수 있어야하지만 가능한 한 그 이상의 권한이 있어야합니다. 또한 suexec를 사용하지 않으면 이러한 지시문은 CGI 스크립트가 상속할 권한도 설정합니다.
MaxConnectionsPerChild는 개별 하위 서버의 수명 동안 처리 할 연결 수 제한으로 오래된 프로세스를 종료하고 새로운 프로세스를 시작하여 서버가 프로세스를 얼마나 자주 재활용하는지 제어합니다.
이 MPM은 mpm-accept mutex를 사용하여 Thundering Herd 문제가 발생할 때 (일반적으로 여러 리슨 소켓이 있는 경우) 수신 연결에 대한 액세스를 직렬화합니다.
'IT 이야기 > Apache' 카테고리의 다른 글
[Apache] httpd.conf 분석 (0) | 2020.05.05 |
---|---|
[Apache] Prefork MPM(Multi-Processing Module) (0) | 2020.04.08 |
[JBCS-httpd24-2.4] JBCS-httpd24-2.4 구성하기 (7) | 2019.12.26 |
[JBCS-Apache HTTP Server] JBCS(jBoss Core Services)-Apache HTTP Server란? (0) | 2019.12.09 |
[Apache] Apache에서 동시 접속자 수를 변경하기 (0) | 2019.11.29 |
댓글