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

[Apache] Prefork MPM(Multi-Processing Module)

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

이 MPM (Multi-Processing Module)은 스레드 되지 않는 pre-forking 웹 서버를 구현합니다.

각 서버 프로세스는 들어오는 요청에 응답 할 수 있으며 상위 프로세스는 서버 풀의 크기를 관리합니다.

스레드로부터 안전하지 않은 라이브러리와의 호환성을 위해 스레딩을 피해야 하는 사이트에 적합합니다.

또한 각 요청을 격리하는데 가장 적합한 MPM이므로 단일 요청의 문제점이 다른 영향을 미치지 않습니다.

 

이 MPM은 매우 자체적으로 조정되므로 구성 지시문을 조정할 필요가 거의 없습니다.

가장 중요한 것은 MaxRequestWorkers가 수신 할 것으로 예상되는 많은 동시 요청을 처리 할 수 있을 만큼 커야하지만 모든 프로세스에 충분한 물리적 RAM이 있는지 확인할 수 있을 만큼 작아야 한다는 것입니다.

 

단일 제어 프로세스는 연결을 수신하고, 도착했을 때 서비스를 제공하는 하위 프로세스를 시작하는 역할을 합니다.

Apache httpd는 항상 여러 개의 여분의 유휴 서버 프로세스를 유지하려고 시도하는데, 이는 들어오는 요청을 처리 할 준비가 되어 있습니다. 이러한 방식으로 클라이언트는 요청을 처리하기 전에 새 자식 프로세스가 분기 될 때까지 기다릴 필요가 없습니다.

 

StartServers, MinSpareServers, MaxSpareServers 및 MaxRequestWorkers는 상위 프로세스가 요청을 처리하기 위해 하위 프로세스를 작성하는 방법을 조정합니다. 일반적으로 Apache httpd는 자체 제어 기능이 뛰어나므로 대부분의 사이트는 이러한 지시문을 기본값에서 조정할 필요가 없습니다. 256 개가 넘는 동시 요청을 처리 해야하는 사이트는 MaxRequestWorkers를 늘려야하지만, 메모리가 제한된 사이트는 MaxRequestWorkers를 줄여 서버가 충돌(메모리를 디스크로 교체)하지 않도록해야 할 수 있습니다.

 

상위 프로세스는 일반적으로 포트 80에 바인딩하기 위해 루트 유닉스로 시작되지만 하위 프로세스는 권한이 낮은 사용자로 Apache httpd에 의해 시작됩니다. User 및 Group 지시문은 Apache httpd 자식 프로세스의 권한을 설정하는데 사용됩니다. 자식 프로세스는 제공 될 모든 내용을 읽을 수 있어야 하지만 가능한 그 이상의 권한이 있어야합니다.

 

MaxConnectionsPerChild오래된 프로세스를 종료하고, 새로운 프로세스를 시작하여 서버가 프로세스를 얼마나 자주 재활용하는지 제어합니다.

이 MPM은 mpm-accept mutex를 사용하여 Thundering Herd 문제가 발생할 때 (일반적으로 여러 리슨 소켓이 있는 경우) 수신 연결에 대한 액세스를 직렬화합니다.

 

<MaxSpareServers>

기본값 : MaxSpareServers 10 

MaxSpareServers 지시문은 원하는 최대 유휴 자식 서버 프로세스 수를 설정합니다. 유휴 프로세스는 요청을 처리하지 않는 프로세스입니다. MaxSpareServers보다 많은 유휴 상태가 있으면 상위 프로세스가 초과 프로세스를 종료시킵니다.

 

<MinSpareServers>

기본값 : MinSpareServers 5

MinSpareServers 지시문은 원하는 최소 유휴 자식 서버 프로세스 수를 설정합니다. 유휴 프로세스는 요청을 처리하지 않는 프로세스입니다. MinSpareServers 유휴 상태보다 적은 수의 경우 부모 프로세스는 새 자식을 만듭니다. 1 개를 생성하고 1 초간 기다린 다음 2 개를 생성하고 1 초간 기다린 다음 4 개를 생성하며 초당 32 명의 자식이 생성 될 때까지 기하 급수적으로 계속됩니다. MinSpareServer 설정을 만족할 때마다 중지됩니다.

이 매개 변수의 조정은 매우 바쁜 사이트에서만 필요합니다.

 

<기본 구성>

StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxRequestWorkers       256
MaxConnectionsPerChild  4000

 

<기본값>

StartServers       5
MinSpareServers    5
MaxSpareServers   10
ServerLimit      256
MaxRequestWorkers       256
MaxConnectionsPerChild  ?
반응형

댓글