Apache HTTPD 2.0 버전에 추가된 MPM 중 Prefork MPM과 worker MPM 차이점
Prefork MPM | Worker MPM |
프로세스(멀티 프로세스)를 사용해 요청을 처리 | 멀티 스레드와 멀티 프로세스를 사용해 요청을 처리 |
r = n | r = 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
Worker MPM
위의 예에서 보면 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/