본문 바로가기

Server/Web Server

Apache MPM 방식

◎Apache MPM(Multi-Processing Modules) 란?


클라이언트가 Http서버로 전송한 요청을 다중처리하기 위해 자식 프로세스들에게 분배하는 모듈 

 

◎MPM 방식 종류  


1) Prefork 방식

  • 실행중인 프로세스를 복제하여 실행 (1 process- 1 thread 방식, 자식 프로세스는 최대 1024개 가능.)
  • 요청이 독립적인 프로세스로 처리되기 때문에, 프로세스 오류가 발생해도 다른 요청에 영향 X (메모리 사용공간 다름.)
  • 프로세스가 독립적으로 실행되므로 프로세스 수가 많아짐에 따라 cpu, memory 등 시스템 리소스에 부하가 심해짐.
  • 요청이 많이 없고 각각의 연결 안정성이 중요한 서비스에 사용 

 

2) Worker 방식 

  • 각 요청을 프로세스의 스레드로 받아 처리 
  • 1 process- multi thread 방식으로 프로세스 별 스레드 개수를 정할 수 있다. 
  • 연결마다 메모리 공간을 공유하여 리소스 부하가 줄어든다는 장점이 있지만, 오류 발생시 한 프로세스 내 모든 스레드들이 영향을 받을 수 있음.
  • 대량 연결이 필요한 서비스에서 사용 (Prefork 방식보다 효율적)

 

3) Event-driven 방식

  • APACHE 2.4 버전부터 지원되는 방식
  • 비동기식 이벤트 기반 방식으로 각 상태를 정하고 여기서 요청 등 event가 발생할 때 마다 해당 event를 처리하도록 더 작은 쓰레드로 처리하는 방식 (리소스 부하 ↓)
  • I/O 등 CPU가 관여하지 않는 작업이 시작되면 바로 다른 작업을 수행함. (하나의 요청이 모두 끝날때까지 프로세스를 물고있었던 위의 방식들과 차이가 있음.)
  • 3가지 방법 중 처리 속도가 가장 빠름 (동접자가 많은 서비스에 유리)

 

◎httpd.conf 파일에 각 MPM 적용방법 


1)Prefork 

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so // prefork 모듈 로드

<IfModuel mpm_prefork_module>

StartServers 5  // 서버 시작시 생성되는 자식 프로세스 개수 지정 

MinSpareServers 5 // 최소 프로세스 개수 지정

MaxSpareServers 10 // 최대 프로세스 개수 지정

MaxRequestWorkers 300 // 최대 동시 접속자 수, default 256 

ServerLimit 300 // MaxRequestWorkers와 같은 역할 , 지정한 크기보다 클 경우 자동으로 kill 

MaxConnectionsPerChild 0 // 각 자식 프로세스에 연결될 수 있는 처리량(0으로 설정시 무한대) 

</IfModule>


2)Worker

LoadModule mpm_worker_module modules/mod_mpm_worker.so // worker 모듈 로드

<IfModuel mpm_worker_module>

StartServers 5 // 서버 시작시 생성되는 자식 프로세스 개수 지정 , default 3

MaxClients 150 // 동시에 처리될 최대 연결 수, default = serverLimit *ThreadsPerChild

MinSpareServers 5 // 최소 프로세스 개수 지정

MaxSpareServers 10  // 최대 프로세스 개수 지정

ThreadsPerChild 25 // 각 자식프로세스가 가질 수 있는 thread 개수 

MaxRequestWorkers 300 // MaxClient와 같은 역할 

MaxConnectionsPerChild 0 // 각 자식 프로세스에 연결될 수 있는 처리량(0으로 설정시 무한대)

</IfModule>


3)Event-Drivent 

LoadModule mpm_event_module modules/mod_mpm_event.so // event 모듈 로드

<IfModuel mpm_worker_module>

StartServers 3  // 서버 시작시 생성되는 자식 프로세스 개수 지정

MinSpareThreads 75 // 최소 프로세스 개수 지정

MaxSpareThreads 250  // 최대 프로세스 개수 지정

ThreadsPerChild 25  // 각 자식프로세스가 가질 수 있는 thread 개수

MaxRequestWorkers 400 // MaxClient와 같은 역할 

MaxConnectionsPerChild 0 / 각 자식 프로세스에 연결될 수 있는 처리량(0으로 설정시 무한대)

</IfModule>


**실 사용시 모듈만 로드해주고 각 옵션값들 따로 지정해주지 않아도 사용 가능. 

--> 성능에 대한 튜닝이 필요할 경우 각 옵션 튜닝

**대부분 event-driven 방식 사용 (요청 처리 효율이 뛰어남.)

 

 

 

<도움받은 사이트>

blog.dalso.org/home-server/webserver/284

 

Apache 2.4 처리방식 변경하기.(MPM, worker, prefork, Event-Driven) - 달소씨의 하루

아파치 서버에서 MPM(Multi-Processing Moudules)이란 클라이언트에서 받아들인 요청을 처리하기 위해서 자식 프로세스들에게 분배하는 모듈이다. 아파치가 2.4.x 버전 이전에는 prefork 와 worker MPM방식이 �

blog.dalso.org

jang8584.tistory.com/254

 

Apache MPM(prefork,worker) 최적화 테스트

1. Apache 최적화 – 아래 작성한 값은 알맞은 값이 아니며, 웹서버를 실행한 상태에서 지속적인 모니터링을 통해 알맞은 값을 찾아야 합니다. 1-1) Apache MPM (prefork, worker) < prefork 방식 > – 자식.

jang8584.tistory.com

medium.com/sjk5766/%EB%84%8C-%EB%AD%90%EB%8B%88-nginx-9a8cae25e964