Apache MPM 종류와 동시 처리 한도 점검하기

목차

Apache의 prefork·worker·event MPM과 주요 동시 처리 설정을 정리했습니다. CPU 수만 보고 임의의 값을 넣기보다 현재 처리 방식, 요청 특성, 메모리와 연결 지연을 먼저 확인합니다.

현재 MPM 확인

패키지 설치에서는 보통 /etc/httpd/conf.modules.d/00-mpm.conf에 MPM 모듈 선택이 있습니다. 한 번에 하나의 MPM만 로드해야 하며 사용하는 PHP·확장 모듈의 스레드 호환성도 확인합니다.

TERMINAL / CONFIG
httpd -V | grep -i mpm
httpd -M | grep mpm
sudo httpd -t

프로세스와 스레드 차이

prefork는 여러 자식 프로세스로 요청을 처리하고 프로세스마다 하나의 처리 흐름을 사용합니다. worker는 프로세스 안에 여러 작업 스레드를 둡니다. event는 worker 구조에 기반해 keep-alive 같은 일부 연결 처리를 작업 스레드와 분리합니다.
MPM 선택은 모듈 호환성과 서비스 특성에 따라 결정합니다. event가 모든 요청에서 항상 빠르다거나, prefork가 모든 장애를 격리한다고 단정하지 않습니다.

주요 한도 관계

prefork의 MaxRequestWorkers는 동시 요청 처리 프로세스 수에 영향을 줍니다. worker·event에서는 ThreadsPerChild와 프로세스 수의 조합을 봅니다. ServerLimit과 ThreadLimit 같은 상한도 일치해야 합니다.

TERMINAL / CONFIG
<IfModule mpm_event_module>
    ServerLimit 4
    ThreadsPerChild 25
    MaxRequestWorkers 100
    MaxConnectionsPerChild 10000
</IfModule>

위 값은 관계를 설명하는 예시로 운영 권장값이 아닙니다. MaxConnectionsPerChild는 자식 프로세스가 교체되기 전 처리하는 연결 수이며 0이면 이 기준의 제한이 없습니다. 연결 수와 HTTP 요청 수가 항상 같지는 않습니다.

변경 결과 판단

메모리 사용량, busy·idle workers, 응답 시간, 백엔드 대기와 오류율을 같은 부하 조건에서 비교합니다. 프로세스 구조나 상한을 바꾸는 설정은 전체 재시작이 필요할 수 있으므로 적용 방식도 확인합니다. 대기 원인이 DB나 애플리케이션이면 Apache의 worker 수만 늘려도 처리량이 좋아지지 않을 수 있습니다.
참고: https://httpd.apache.org/docs/2.4/mod/event.html

웹 › apache
apache 목록