'apache'에 해당되는 글 1건

  1. 2010/10/12 boyo Apache MPM 방식 Prefork / Worker

apache MPM 이란?
MPM (Multi-Processing Module) : 다중 처리 모듈
☞ apache 가 받아들인 요청을 처리하기 위해 "자식 process" 에게 분배하는 방식이다.
 
 
종류 : 여러가지 종류가 있으나 대표적인 prefork 방식과 Worker 방식만 소개 하겠습니다.
 
Prefork
실행중인 프로세스 복제하여 실행 ( 메모리 영역까지 같이 복제)
프로세스가 소비하는 메모리가 많음.
응답프로세스를 미리 띄워놓고 클라이언트 요청시 자식 프로세스가 반응하게 되는 방식.
prefork MPM ( --with-mpm=profork) 컴파일
Prefork 방식은 일반적으로 single CPU 또는 Dual CPU에서 성능이 좋고
 
Worker
worker MPM ( --with-mpm=worker) 컴파일
Worker 방식은 일반적으로 멀티 CPU 시스템에서 성능이 좋다.
요청을 thread 단위로 처리 ( 최대 64개의 thread 처리 가능 )
지정된 만큼의 프로세스와 각 스레드를 준비하여 클라이언트의 요청을 받아들이는 설정
 
Prefork 방식과 Worker 방식의 차이점
(1)  Worker가 Prefork에 비해 적은 메모리 사용한다.
(2)  Worker : 통신량이 많은 서버에 적절한 형태를 가진다.
(3)  Prefork : 안전하지 않은 제 3자가 만든 모듈을 사용할 수 있다.
(4)  Prefork : 디버깅이 빈약한 플랫폼에서 쉽게 디버깅 할 수 있다.
(5)  ‘Worker‘ 와 ‘Prefork‘ 의 속도는 비슷하다.
(6)  apache MaxClient : Prefork 방식일 경우 최대 256 까지 변경 가능하다.
 
기본으로 구동되는 prefork 방식으로 호스트웨이에서는 mpm 을 prefork 로 컴파일하여 제공됩니다. prefork 의 구동 방식은 child 프로세스를 똑같이 복사하면서 access를 처리하여, 이로인해 메모리도 똑같이 복사하게 되며 당연히 메모리를 많이 소비합니다.
이러한 단점을 극복하고자 나온게 httpd-2x.x 부터는 mpm 중에서 worker 가 추가되어 나왔으며, 모든 access 를 하나의 쓰레드로 처리하여, 결론적으로 메모리 소비에는 어느 정도 효과가 있으나, 하나의 쓰레드가 문제가 생기면 해당 쓰레드에 access 중인 모든 프로세스에 문제가 발생됩니다.
결론적으로 복제된 프로세스만 영향을 받는 prefork 에 비해서 굉장히 불안해 집니다.
대안으로 하나의 쓰레드가 처리하는 access 프로세스를 64개로 기본적으로 제한하고, 또는 수정할 수 있게되어 있으나, 이 부분도 더 개선이 되어야겠습니다.
따라서 호스트웨이에서는 위와 같은 이유로 prefork 방식을 권고해드립니다.
(apache.org 에서도 권고하는 사항으로, 아파치 컴파일시 특별한 옵션을 주지 않으면 prefork 로 컴파일됩니다.
2010/10/12 16:58 2010/10/12 16:58
TAG