Contents
개요
MPM(Multi Processing Module)이란 아파치에서 요청을 받아들이고 받아들인 요청을 처리하기 위해 사용하는 모듈이다.
Apache를 컴파일시 혹은 실행할 때 어떤 모듈을 읽어 들일지 선택할 수 있다.
Apache에는 다음의 3가지의 MPM방식이 존재하는데 각 방식별로 특징이 다르기 때문에 웹 서버의 용도에 따라서 어떤 MPM 방식으로 요청을 처리할 것 인지가 아주 중요하다.
- Prefork (default)
- Worker
- Event (apache 2.4 ~)
➡️ Prefork
요청 당 처리를 프로세스로 처리하는 방식.
- 요청과 프로세스는 1:1로 매핑 관계임.
✅ 요청처리 방식
- 동시에 100개의 요청이 들어올경우 100개의 Apache 프로세스가 실행되어 처리된다.
✅ 장점과 단점
- 장점
- 각 요청이 독립적인 프로세스로 처리되기 때문에 프로세스에 오류가 발생해도 다른 요청에 영향을 주지 않는다.
- 단점
- 프로세스가 많아지면 시스템 리소스를 (CPU, Memory 등) 많이 점유하게 된다.
➡️ Worker
각 요청을 프로세스의 스레드로 받아서 처리한다.
✅ 요청처리 방식
- 동시에 100개의 요청이 들어올경우 2개의 Worker 프로세스가 각각 50개의 스레드를 사용하여 처리한다. (프로세스 수를 2개, 최소 스레드 수를 50개로 설정했을 때)
✅ 장점과 단점
- 장점
- Thread로 요청을 처리하기 때문에 prefork 방식에 비해서 시스템 리소스 부하가 적다.
- 단점
- 연결마다 같은 메모리 공간을 공유하기 때문에 경합이 발생할 수 있다.
- 프로세스 오류 발생 시 프로세스 내의 스레드까지 죽기 때문에 여러 연결 (connection)이 동시에 끊어질 수 있다.
- 만약, Apache가 512개의 idle thread를 처리할 수 있도록 셋팅 되어있다면 한개의 프로세스가 512개의 요청 처리를 하도록 하지않고 4개의 프로세스가 128개의 요청을 처리하도록 셋팅하자.
➡️ Event
요청을 처리하는 방식은 Worker 방식과 동일하나 요청이 들어오지 않을경우 사용하지 않는 프로세스는 종료한다.
✅ 요청처리 방식
- 동시에 100개의 요청이 들어올경우 2개의 Worker 프로세스가 각각 50개의 스레드를 사용하여 처리한다.
- 이후 새로운 요청이 들어오지 않을 경우 최소한의 Worker 프로세스만 남기고 종료된다.
✅ 장점과 단점
- 장점
- 시스템 리소스를 효율적으로 사용할 수 있다.
- 단점
- Apache 2.4 버전 이상부터 사용이 가능하다.
- php의 일부 모듈과 호환이 되지 않는다.