====== Apache MPM(Multi-Processing Module) ====== ===== Apache MPM 정의 ===== - Apache Multi-Processing Module - Apache 가 요청을 처리하기 위해서 Child Process에게 분배하는 방식을 이야기 한다. ===== Prefork / Worker ===== - 여러가지 종류의 MPM 이 존재하나, 가장 많이 사용하는 방식이 Prefork 와 Worker 이다. - 전통적인 방식은 prefork 방식이면, 최근에서는 성능에 주안점을 둔 worker 방식을 선호한다. ^ ^ Prefork ^ Worker ^ ^ 동작 | 실행중인 프로세스를 복제하여 실행 \\ (메모리 영역까지 함께 복제) \\ 프로세스가 소비하는 메모리가 많음 | 요청을 Thread 단위로 처리 \\ (최대 64의 Thread 처리 가능) | ^ 차이점 | 안전하지 않은 제3가 만든 모듈 사용가능 \\ 디버깅이 빈약한 플랫폼에서 쉬운 디버깅 가능 | Prefork에 비해 적은 메모리 사용 \\ 통신량이 많은 서버에 적절한 형태 | ^ MaxClients | 최대 256까지 변경가능 | | ===== MaxClients 늘리기 ===== ==== Prefork ==== - apache 1.x - apache 소스 디렉토리의 src/include/httpd.h 파일에서 HARD_SERVER_LIMIT 256 값을 수정하고 컴파일한다. \\ ** define HARD_SERVER_LIMIT 1024 ** - apache 2.x - apache 소스 디렉토리의 server/mpm/prefork/prefork.c 파일에서 DEFAULT_SERVER_LIMIT 256 값을 수정하고 컴파일한다. \\ ** define DEFAULT_SERVER_LIMIT 1024 ** ==== Worker ==== - apache 2.x 버젼에만 존재한다. - MaxClients 는 StartServers 와 ThreadsPerChild 의 곱에 의해서 결정된다. MaxClients = StartServer * ThreadsPerChild worker 방식은 각각의 Child Process별로 여러개의 thread 를 생성하여 요청을 처리하기 때문이다. - Maxclient를 늘리기 위한 설정 - apache 소스 디렉토리의 server/mpm/worker/worker.c 파일에서 DEFAULT_SERVER_LIMIT 16 값을 수정하고 컴파일한다.