목차

Apache MPM(Multi-Processing Module)

Apache MPM 정의

  1. Apache Multi-Processing Module
  2. Apache 가 요청을 처리하기 위해서 Child Process에게 분배하는 방식을 이야기 한다.

Prefork / Worker

  1. 여러가지 종류의 MPM 이 존재하나, 가장 많이 사용하는 방식이 Prefork 와 Worker 이다.
  2. 전통적인 방식은 prefork 방식이면, 최근에서는 성능에 주안점을 둔 worker 방식을 선호한다.
Prefork Worker
동작 실행중인 프로세스를 복제하여 실행
(메모리 영역까지 함께 복제)
프로세스가 소비하는 메모리가 많음
요청을 Thread 단위로 처리
(최대 64의 Thread 처리 가능)
차이점 안전하지 않은 제3가 만든 모듈 사용가능
디버깅이 빈약한 플랫폼에서 쉬운 디버깅 가능
Prefork에 비해 적은 메모리 사용
통신량이 많은 서버에 적절한 형태
MaxClients 최대 256까지 변경가능

MaxClients 늘리기

Prefork

  1. apache 1.x
    1. apache 소스 디렉토리의 src/include/httpd.h 파일에서 HARD_SERVER_LIMIT 256 값을 수정하고 컴파일한다.
      define HARD_SERVER_LIMIT 1024
  2. apache 2.x
    1. apache 소스 디렉토리의 server/mpm/prefork/prefork.c 파일에서 DEFAULT_SERVER_LIMIT 256 값을 수정하고 컴파일한다.
      define DEFAULT_SERVER_LIMIT 1024

Worker

  1. apache 2.x 버젼에만 존재한다.
  2. MaxClients 는 StartServers 와 ThreadsPerChild 의 곱에 의해서 결정된다.
     MaxClients = StartServer * ThreadsPerChild 

    worker 방식은 각각의 Child Process별로 여러개의 thread 를 생성하여 요청을 처리하기 때문이다.

  3. Maxclient를 늘리기 위한 설정
    1. apache 소스 디렉토리의 server/mpm/worker/worker.c 파일에서 DEFAULT_SERVER_LIMIT 16 값을 수정하고 컴파일한다.