MPM(Multi Processing Module)은 아파치에 들어오는 요청을 프로세스/쓰레드 기반 방식으로 처리하며,
다음과 같이 Prefork, Worker 2가지 방식을 선택할 수 있다.
Prefork 방식
1. 기본 설정이며, 1개의 프로세스에 1개의 쓰레드가 요청을 처리한다. (프로세스:쓰레드=1:1)
2. 요청별로 프로세스가 생성되기 때문에 메모리 정보를 공유하지 않으므로 안정적인 장점이 있다.
3. 각 요청마다 하나의 프로세스가 소비되기 때문에, 메모리의 사용량이 높다.
4. 설정정보
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 2048 MaxRequestsPerChild 0 </IfModule>
1) StartServers
- 웹서버 시작시 띄우게 되는 자식 프로세스 수. 디폴트값 3.
- 운영시 MinSpareServers, MaxSpareServers에 의해 프로세스가 변동되므로 설정시 큰 의미는 없다.
2) MinSpareServers
- 클라이언트 요청이 적을 경우 아파치는 이 값만큼 자식 프로세스를 유지하려 시도한다.
- 즉, 절대적인 값이 아니다.
3) MaxSpareServers
- 클라이언트 요청이 많을 경우 아파치는 이 값만큼 자식 프로세스를 줄이려고 시도한다.
- 역시 절대적인 값이 아니다.
4) MaxClients
- 클라이언트 요청을 동시에 처리될 수 있는 최대값. 이 값을 초과하면 ListenBackLog에 설정된 값만큼 큐잉 된다.
- 동시접속이 많을 경우 이 값을 증가시켜 준다.
- 이 값은 아파치+톰캣 연동시 톰캣의 maxThreads값과 맞춰주는 것이 좋다.
5) MaxRequestsPerChild
- 자식 프로세스에서 처리할 수 있는 요청갯수를 제한한다.
- 0으로 설정하면 무한대.
- 500이라는 값으로 설정을 하게 되면 자식 프로세스는 500번의 요청을 처리하고 프로세스는 다시 fork되어야 한다.
Worker 방식
1. 1개의 프로세스에서 여러개의 쓰레드가 요청을 처리한다. (프로세스:쓰레드=1:N)
2. Prefork보다 메모리를 적게 사용하는 장점이 있으나, 프로세스내 메모리 정보는 쓰레드간 공유된다.
3. 동시접속이 많을 경우, Prefork방식보다 유리하게 처리할 수 있다.
4. Worker방식을 사용하기 위해서는 컴파일시 --with-mpm=worker 옵션을 주어야 한다. 현재 아파치의 MPM방식을 확인하기 위해서는 httpd -V 또는 http -l 명령을 실행하면 된다.
5. 설정정보
<IfModule mpm_worker_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
1) StartServers
- Prefork방식과 동일
2) MaxClients
- 클라이언트 요청을 동시에 처리할 수 있는 최대값(프로세스 X 쓰레드)
3) MinSpareThreads
- 최소로 유지하려 하는 쓰레드 값
4) MaxSpareThreads
- 최대로 유지하려 하는 쓰레드 값
5) ThreadsPerChild
- 자식 프로세스가 가질 수 있는 쓰레드 최대값
6) MaxRequestsPerChild
- Prefork방식과 동일
※ 참고자료
- http://www.koreaidc.com/bbs/set_view.php?b_name=idcpds&w_no=153
- http://mcpaint.tistory.com/151
- http://www.isfull.com/bbs/board.php?bo_table=tb_xnux&wr_id=286
- http://itnp.kr/roller/home/entry/아파치_동시_접속자_수_늘리기
- http://jjosh.tistory.com/entry/최대-성능을-위한-아파치-환경설정
'서버 > 아파치' 카테고리의 다른 글
[아파치] mod_rewrite 모듈 (0) | 2016.02.23 |
---|---|
[아파치] mod_setenvif 모듈 (0) | 2016.02.22 |
[아파치]VirtualHost 설정 (0) | 2016.02.21 |
[아파치]httpd.conf 서버설정 (0) | 2016.02.20 |
[아파치] httpd.conf 전역설정 (0) | 2016.02.12 |