http://cafe.naver.com/q69/114525MPM 이란?

1)  Multi-Processing Module
     : apache 가 받아 들인 요청을 처리 하기 위해 'child processes'에게 분배하는 방식.
         http://httpd.apache.org/docs/2.2/en/mpm.html

2) 종 류(여기서는 일반적인 unix(linux)관련 'MPM'만 언급합니다.)
   a. worker : 여러 'child process' 가 여러 'thread'를 사용합니다.
   b. prefork(default)
     : 여러 'child process' 가 각각 하나의 'thread'를 사용합니다. (apache 설치시 기본 설치됨.)
         http://httpd.apache.org/docs/2.2/en/misc/perf-tuning.html



3)  차 이 점 ( apache 설치시 지정하지 않으면 'prefork'로 설치 됩니다. )
   a. 'worker'는 'prefork' 보다 적은 양의 메모리를 사용합니다.
   b. 'worker'는 통신량이 많은 서버에 적절합니다.
   c. 'worker'와 'prefork'의 속도는 비슷합니다.
   d. 'prefork'는 안전하지 않은 제 삼자가 만든 모듈을 사용할 수 있습니다.
   e. 'prefork'는 디버깅 지원이 빈약한 플랫폼에서 쉽게 디버깅 할 수 있습니다.
       http://httpd.apache.org/docs/2.2/en/misc/perf-tuning.html

** 요즘에는 'worker'로 설치를 하는 추세 입니다. 문제가 발생하리 만큼 안전하지 않은 모듈은 과거의 잔존물이고, 디버깅이 성능보다 앞서지 않기 때문인거 같습니다. "성능"에 좀 더 주안점을 둡니다. **



     2. DSO 란?

1) Dynamic Shared Objects : 동적 모듈 적재 방식
      http://httpd.apache.org/docs/2.2/en/dso.html

2) 'static' 과의 차이점 - 시스템적으로 고려할 사항에 집중하였습니다.
   a. 'static'은 모듈 추가시 apache 재 컴파일이 필요하다.
   b. 'static'은 모든 모듈이 시스템(http)에 탑재된다.
   c. 'DSO'는 모듈 추가시 재 컴파일이 필요하지 않다.
   d. 'DSO'는 클라이언트 요청시 시스템(http)에 탑재 된다.
      http://www.linuxlab.co.kr/docs/00-05-4.htm

3) 'static' 과 'DSO'의 장단점 - manual 상의 장단점은 메뉴얼 참고 하세요.
   a. 'static' 장점 : 클라이언트 요청에 즉시 응답이 가능하다.
   b. 'static' 단점 : 클라이언트에서 사용하지 않는다면 쓸데 없는 리소스만 항상 낭비하게 된다.
                          새로운 모듈 추가시, 아파치 재 컴파일이 필요하다.
   c. 'DSO' 장점 : 쓸데없는 리소스를 낭비하지 않는다.
                          새로운 모듈 추가시, 아파치 재 컴파일이 필요 없다.
   d. 'DSO' 단점 : 모든 모듈을 사용가능한게 아니다.
                         클라이언트에 대한 응답이 늦어 진다.
      http://httpd.apache.org/docs/2.2/en/dso.html
      http://www.linuxlab.co.kr/docs/00-05-4.htm


** 'apache2'로 넘어 오면서 많은 시스템에서 'DSO'를 사용합니다. 이는 과거 늦은 하드디스크 속도로 인하여, 응답속도에 많은 차이가 있었으나, 근래에는 높은 하드디스크 속도로 인하여 응답속도에 대한 부분이 많이 감소하였으며, default로 올라오는 20가지에 육박(혹은 넘는)하는 모듈중 사용하는 모듈은 극히 일부이기 때문입니다. **

 


Apache 를 설치하기전 MPM 모듈을 사용하기 위한 몇가지 수정사항이 있습니다.


cd httpd-2.0.49 /// 요기는 Apache 압축 푼 디렉토리
vi server/mpm/prefork/prefork.c
#define DEFAULT_SERVER_LIMIT 256 // 을
#define DEFAULT_SERVER_LIMIT 1280 // 로 수정
vi server/mpm/worker/worker.c
#define DEFAULT_SERVER_LIMIT 16 // 찾아서 ( 16 * 16 = 1024) #define DEFAULT_SERVER_LIMIT 20 // 로 수정(20 * 64 = 1280)