본문 바로가기

Apache

아파치 동작방식 (prefork & worker)

Apache 에는 2가지의 MPM(Multi Processing Module : 다중 처리 모듈)방식이 있습니다. 

  

바로 prefork 와 worker 방식입니다. 

  

prefork 는 apache2 설치시 기본으로 적용되는 방식이고, worker 는 옵션을 주어 설치를 할 수 있습니다. 

(yum 과 같이 rpm 으로 설치한 경우 /etc/sysconfig/httpd 파일에서 #HTTPD=/usr/sbin/httpd.worker 부분의 #(주석) 를 제거하여 아파치(Apache)를 재시작 합니다.) 

  

예) Apache 2.2.20 컴파일시 

prefork : 별도의 옵션을 입력 안해도 됩니다. 



  
.⁄configure --prefix=⁄usr⁄local⁄apache --enable-rule=SHARED_CORE --enable-module=so --enable-shared=max --enable-so  --enable-ssl  --enable-modules=ssl  --enable-rewrite=shared --enable-unique-id 
  

  

  

worker : --with-mpm=worker 옵션을 추가하여 configuer 합니다. 



  
.⁄configure --prefix=⁄usr⁄local⁄apache --enable-rule=SHARED_CORE --enable-module=so --enable-shared=max --enable-so  --enable-ssl  --enable-modules=ssl  --enable-rewrite=shared --enable-unique-id --with-mpm=worker 
  

  

웹서버의 용도에 따라 이 MPM 방식이 중요합니다. 각 방식별로 특징이 다르기 때문이지요. 



prefork 

  

prefork 방식은 쓰레드가 한개의 자식 프로세스를 여러개 사용하며 각 프로세스는 한 번에 한 연결을 담당합니다. 
또한 실행중인 프로세스를 메모리 영역까지 복제하여 실행하기에 당연히 프로세스가 소비하는 메모리가 많습니다. 

(특정 자식프로세스가 메모리를 많이 잡아먹어 Apache프로세스가 Swap 영역까지 사용하여 시스템이 다운되는 현상을 경험했었습니다..ㅜㅜ) 

하지만 메모리를 직접 공유하지 않고 독립적인 메모리를 할당하기에 안정적 이라고 할 수 있습니다. 

메모리 소비가 많은 대신 응답 프로세스를 미리 띄어 놓고 클라이언트가 요청을 하면 자식 프로세스가 응답을 합니다. 

  

  

worker 

  

worker 방식은 한 자식프로세스 당 여러개의 쓰레드(thread)를 사용합니다. 이 쓰레드는 최대 64개까지 사용할 수 있으며, 지정된 만큼의 프로세스와 각 쓰레드를 준비하여 클라이언트 요청을 받아 들입니다. 또한 쓰레드간에 메모리를 서로 공유하기 때문에 prefork 방식보다 메모리 소비가 적습니다. 
동시접속자 수가 많거나 다중 CPU 환경에 적합합니다. 메모리를 공유해서 인지 하나의 쓰레드에서 문제가 발생하면 해당 쓰레드에 

Acess 하여 작업중인 모든 프로세스에 문제가 발생한다고 하지만 아직까지 경험해보지는 못했습니다. 

이게 진정 단점인지 모르겠지만 일부 OS(예:우분투)의 최신버전에서는 apache 를 자동설치시 기본으로 worker 방식으로 설치가 됩니다. 


출처 : soul.tistory.com


'Apache' 카테고리의 다른 글

아파치 동시 접속자 수 체크  (0) 2015.10.07