MPM : Multi-Processing Modules, MPMs (다중 처리 모듈)
- 여러 방식이 존재하지만, 대표적으로 Prefork 와 Worker 방식을 많이 사용함.
Prefork
- 쓰레드가 한개의 자식 프로세스를 여러개 사용하며 각 프로세스는 한번에 한 연결을 담당
- worker보다 좀 더 많은 메모리를 사용함
- 프로세스간 메모리를 직접 공유하지 않으므로, 메모리 공간이 독립적이어서 안정적임
설정
예
<IfModule
mpm_prefork_module>
StartServers
5
MinSpareServers
5
MaxSpareServers
10
MaxClients
150
MaxRequestsPerChild
0
</IfModule>
옵션
설명
StartServer
아파치 구동시에 자식 프로세스 개수
지정
MinSpareServers, MaxSpareServers
부하가 적어서
MinSpareServers 개수 보다 적었을 경우 최소한 이 개수 만큼 유지하려고 아파치가 노력하고
부하가 증가하여 프로세스 개수가 많아질
경우에 MaxSpareServers 개수 이하로 줄이려고 아파치는 노력한다.
즉, 절대적인 수치가
아니다.
MaxClient
초기 시작시 실행가능한 최대 아파치 자식
프로세스의 개수를 지정
*worker방식의 MaxClient
와는 전혀 다른 의미임.
MaxReqeustPerChild
클라이언트들의 요청 개수를 제한. 만약
자식 프로세스가 이 값만큼의 클라이언트 요청을 받았다면 이 자식 프로세스는 자동으로 죽게 된다. 0 일 경우엔 무한대
Worker
- 자식 프로세스들이 각각 여러 쓰레드를 사용하며, 각 쓰레드는 한번에 한 연결을 담당
- Prefork보다 메모리 사용량이 적음. 통신량이 많은 서버에 적절
- 쓰레드 간에 메모리 공간을 공유함. 리소스 경합이 발생하지 않도록 주의 필요.
설정
예
<IfModule
mpm_worker_module>
StartServers
2
MaxClients
150
MinSpareThreads
25
MaxSpareThreads
75
ThreadsPerChild
25
MaxRequestsPerChild
0
</IfModule>
옵션
설명
StartServers
시작시에 생성되는 서버 프로세스의
개수
MaxClient
동시 연결가능한 클라이언트의 최대
개수.
MinSpareThreads
최소 thread
개수
MaxSpareThreads
최대
thread개수
ThreadPerChild
개별 자식 프로세스가 지속적으로 가질 수
있는 Thread의 개수
MaxRequestPerChild
자식 프로세스가 서비스할 수 있는 최대
요청 개수
* 확장성이 필요한 사이트는 worker방식을 택하고, 안정성과 오래된 소프트웨어와 호환성이 필요한 사이트는 Prefork를 사용하기도 한다.
* Linux의 경우, Prefork 방식이 Default이며, Worker방식을 사용하기 위해서는 설치시에 -with-mpm=worker 옵션을 주어야 한다.
ex) ./configure --prefix=/home/paint/apache-2.2.15 --enable-mods-shared=all --enable-module=so --enable-so --with-mpm=worker