[Apache] Worker MPM(Multi-Processing Module)
본문 바로가기
IT 이야기/Apache

[Apache] Worker MPM(Multi-Processing Module)

by 찬찬이 아빠 2020. 4. 8.
반응형

Worker MPM(Multi-Processing Module)은 하이브리드 다중 프로세스 다중 스레드 서버를 구현합니다.

스레드를 사용하여 청을 처리하면 프로세스 기반 서버보다 적은 시스템 자원으로 많은 수의 요청을 처리 할 수 ​​있습니다. 그러나 각각 스레드가 많은 여러 프로세스를 사용 가능하게하여 프로세스 기반 서버의 안정성을 크게 유지합니다.

 

이 MPM을 제어하는​​데 사용되는 가장 중요한 지시문 ThreadsPerChild은 각 하위 프로세스에서 배포되는 스레드 수 MaxRequestWorkers를 제어하고, 시작될 수있는 최대 총 스레드 수를 제어합니다.

 

단일 제어 프로세스 (부모)는 자식 프로세스를 시작합니다.

각 하위 프로세스는 ThreadsPerChild 지시문에 지정된 대로 고정된 수의 서버 스레드와 연결을 수신하고, 서버 스레드에 전달하여 도착할 때 처리하도록 리스너 스레드를 작성합니다.

 

Apache HTTP Server는 항상 들어오는 요청을 처리 할 수있는 예비 또는 유휴 서버 스레드 풀을 유지하려고 합니다. 

이러한 방식으로 클라이언트는 요청을 처리하기 전에 새 스레드 또는 프로세스가 작성 될 때까지 기다릴 필요가 없습니다.

 

처음 시작할 프로세스 수 StartServers 지시문에 의해 설정됩니다.

구동하는 동안 서버는 모든 프로세스에서 총 유휴 스레드 수를 할당하고, MinSpareThreadsMaxSpareThreads에 의해 지정된 범위 내에서 이 숫자를 유지하기 위해 프로세스를 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 문제가 발생할 때 (일반적으로 여러 리슨 소켓이 있는 경우) 수신 연결에 대한 액세스를 직렬화합니다.

반응형

댓글