본문으로 바로가기

Contents

    개요

    MPM(Multi Processing Module)이란 아파치에서 요청을 받아들이고 받아들인 요청을 처리하기 위해 사용하는 모듈이다.

    Apache를 컴파일시 혹은 실행할 때 어떤 모듈을 읽어 들일지 선택할 수 있다.

     

    Apache에는 다음의 3가지의 MPM방식이 존재하는데 각 방식별로 특징이 다르기 때문에 웹 서버의 용도에 따라서 어떤 MPM 방식으로 요청을 처리할 것 인지가 아주 중요하다.

    1. Prefork (default)
    2. Worker
    3. 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의 일부 모듈과 호환이 되지 않는다.