- MPM(Multi-processing Module): Apache가 받아 들인 요청을 처리하기 위해 'child processes'에게 분배하는 방식
-확장성이 필요한 사이트는 worker방식을 택하고, 안정성과 소프트웨어와 호환성이 필요한 사이트는 Prefork를 보편적으로 사용
-Linux의 경우, Prefork 방식이 기본 설정이며, Worker방식을 사용하기 위해서는 설치시에 -with-mpm=worker옵션을 사용하여 설치 - Prefork
1)실행중인 프로세스를 복제하여 실행(메모리 영역까지 같이 복제)
2)프로세스가 소비하는 메모리가 많음
3)응답프로세스를 미리 띄워놓고 클라이언트 요청 시 자식 프로세스가 반응하게 되는 방식
4)안전하지 않은 제 3자가 만든 모듈 사용 가능
5)디버깅이 빈약한 플랫폼에서 쉬운 디버깅 가능
6)일반적으로 single CPU 또는 Dual CPU에서 성능이 좋음 - Worker
1)자식 프로세스들이 각각 여러 스레드를 사용하여, 각 스레드는 한번에 한 연결을 담당
2)Worker 방식은 일반적으로 멀티 CPU 시스템에서 성능이 좋다.
3)요청을 스레드 단위로 처리 (최대 64개의 스레드 처리가능)
4)지정된 만큼의 프로세스와 각 스레드를 준비하여 클라이언트의 요청을 받아들이는 설정
5)기본 사용 메모리는 prefork보다 낮으면 스레드간에 메모리를 서로 공유함
6)동시접속자가 많은 사이트에 적합 - Prefork와 Worker 방식의 차이점
1)Worker가 Prefork에 비해 적은 메모리를 사용한다.
2)Worker: 통신량이 많은 서버에 적절한 형태를 가진다.
3)Prefork: 안전하지 않은 제 3자가 만든 모듈을 사용할 수 있다.
4)Prefork: 디버깅이 빈약한 플랫폼에서 쉽게 디버깅 할 수 있다.
5)'Worker'와 'Prefork'의 속도는 비슷하다. - Event
-요청과 Keep Alive한 아파치 요청을 그대로 맺는 것이 아니라, 요청을 처리하는 스레드를 따로 두도록 하여 분산된 처리를 할 수 있게 하는 목적을 둠 2.4.x 버전부터 설정이 추가되었음
- 설정
1)httpd.conf 수정
-vi httpd.conf
-"include conf/extra/httpdmpm.conf" 설정의 주석을 제거
2)Prefork 방식
-한개의 자식 프로세스는 한 개의 연결을 담당한다.
-프로세스가 생성되는 구조이므로 당연히 worker보다 많은 메모리를 사용한다.
-프로세스간 메모리를 직접 공유하지 않으므로, 메모리 공간이 독립적이어서 안정적이다.
-conf/extra/httpd-mpm.conf 파일 수정<ifModule mpm_prefork_module>StartServers 5MinSpareServers 5MaxSpareServers 10MaxRequestWorkers 250MaxConnectionsPerChild 0</ifModule ><옵션 설명>-StartServer: 시작시에 생성되는 서버 프로세스의 개수
-MinSpareServers, MaxSpareServers: 부하가 적어서 MinSpareServers 개수 보다 적었을 경우 최소한 이 개수 만큼 아파치가 유지하려 하며, 부하가 증가하여 프로세스 개수가 많아질 경우에 MaxSpareServers개수 이하로 줄이려고 아파치가 구동
-MaxConnectionsPerChild: 클라이언트들의 연결을 제한.(만약 자식 프로세스가 값만큼 요청을 받았을때 자식 프로세스는 자동으로 kill, 0인경우 무한대)3)Worker 방식
-자식 프로세스들이 여러개의 스레드를 갖을 수 있으며, 각 스레드는 한번에 한 연결을 담당
-Prefork보다 메모리 사용량이 적으며, 통신량이 많은 서버에 적절
-스레드 간에 메모리 공간을 공유하며, 리소스 경합이 발생하지 않도록 주의 필요.
-conf/extra/httpdmpm.conf 파일 수정<ifModule mpm_worker_module>StartServers 5MinSpareThreads 75MaxSpareThreads 250ThreadsPerChild 25MaxRequestWorkers 400MaxConnectionsPerChild 0</ifModule ><옵션 설명>-StartServer: 시작시에 생성되는 서버 프로세스의 개수
-MinSpareThread: 최소 thread 수
-MaxSpareThreads: 최대 thread 수
-ThreadPerChild: 자식 프로세스별 지속적으로 가질 수 있는 thread의 수
-MaxRequestWorkers: 자식 스레드의 최대 수
-MaxConnectionsPerChild: 자식 프로세스가 서비스할 수 있는 최대 요청 개수