본문 바로가기

IT/Apache

Apache httpd – Prefork MPM 과 Worker MPM 의 비교

Apache HTTPD 2.0 버전에 추가된 MPM 중 Prefork MPM과 worker MPM 차이점

Apache HTTPD 2.0 버전에 추가된 MPM 중 가장 많이 사용하는 Prefork MPM과 worker MPM의 차이점을 간단하게 설명합니다.
먼저 prefork MPM은 Apache 1.3 버전에서 사용하던 방식으로 자식 프로세스를 먼저 시작해 놓고, 클라이언트 요청에 대해서 각각의 자식 프로세스가 통신을 담당하는 방식입니다.
따라서 자식 프로세스가 어떤 원인으로 정지하더라도 다른 자식 프로세스에 영향을 주지 않는 특징이 있습니다.
Worker MPM은 자식 프로세스에서 멀티 스레드로 실행되며, 클라이언트 요청을 스레드가 처리하는 방식입니다.
하나의 프로세스가 멀티 스레드를 이용해 여러 요청을 담당하게 되어 prefork방식과 비교할 때,
 시작 시 프로세스 수를 줄일 수 있고, 메모리 사용량이 낮으며, 부팅 시간이 빠릅니다.

Prefork MPM

Worker MPM

프로세스(멀티 프로세스)를 사용해 요청을 처리멀티 스레드와 멀티 프로세스를 사용해 요청을 처리
r = nr = n × m
PHP를 사용하는 웹사이트에서 높은 성능이 필요하다면 prefork MPM 을 사용스레드는 메모리를 작게 사용하고 프로세스 방식보다 시작 시간이 빠르며 성능이 우수

StartServers       8

MaxClients       256

MinSpareServers    5

MaxSpareServers   20

ServerLimit      256

MaxRequestsPerChild  4000

StartServers         2

MaxClients         150

MinSpareThreads     25

MaxSpareThreads     75

ThreadsPerChild     25

MaxRequestsPerChild  0

Prefork MPM

Apache MPM Prefork

Worker MPM

Apache MPM Worker

위의 예에서 보면 StartServers는 prefork와 worker 모두 있는 항목이지만 prefork는 8개이고 worker는 2개 입니다.
이 차이는 프로세스와 스레드의 차이에 의한 것입니다. 위의 설정에서 prefork 는 5에서 20개의 프로세스를 항상 유지합니다.
worker는 25에서 75개의 여유 스레드를 유지하는 반면 worker 는 프로세스의 제한은 명확하게 설정되어 있지 않습니다.
위의 예에서 worker는 시작 시 2개 프로세스에서 사용 가능한 스레드가 범위에 없는 경우 프로세스를 추가하거나 불필요한 프로세스를 제거합니다.
또한, MaxRequestsPerChild 0으로 무제한으로 설정합니다.
서버는 요청을 기다리고 있는 서버 스레드 개수를 체크하여 MaxSpareThreads, 즉 75개 이상이 있으면 서버 프로세스를 제거하고, MinSpareThreads 25개 미만인 경우 새로운 프로세스를 생성합니다.


참조 : http://www.opennaru.com/jboss/apache-prefork-vs-worker/