Apache 웹 서버 MPM 구성 방법(프리포크, 작업자)
Apache 웹 서버의 MPM(Multi-Processing Module)은 웹 서버가 처리할 수 있는 동시 연결 수와 처리 방법을 결정합니다.
아파치 웹 서버의 MPM 중에는 프리포크(prefork)와 워커(worker) MPM이 있는데 각각의 특징과 구성 방법에 대해 알아보자.
프리포크 MPM
prefork MPM은 각 연결을 처리하기 위해 별도의 프로세스를 생성하는 방법입니다.
이 접근 방식은 안정적이고 예측 가능한 성능을 제공하지만 동시 연결 수가 적으면 성능이 저하됩니다.
이러한 이유로 prefork MPM은 PHP와 같은 스크립팅 언어를 사용하는 웹 사이트에서 일반적으로 사용됩니다.
프리포크 MPM 설정 방법
1. Apache 구성 파일(httpd.conf 또는 apache2.conf)에서 MPM 모듈을 로드합니다.
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
2. 프리포크 MPM을 활성화합니다.
<IfModule mpm_prefork_module>
ServerLimit 10
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 10
MaxRequestsPerChild 0
</IfModule>
- ServerLimit: 생성할 최대 프로세스 수를 설정합니다.
- StartServers: 서버 시작 시 생성되는 프로세스 수를 설정합니다.
- MinSpareServers: 유휴 프로세스 수를 설정합니다.
- MaxSpareServers: 유휴 프로세스 수가 이 값보다 크면 일부 프로세스를 종료합니다.
- MaxClients: 처리할 수 있는 최대 클라이언트 수를 설정합니다.
- MaxRequestsPerChild: 각 프로세스가 처리할 수 있는 최대 요청 수를 설정합니다.
무한 처리를 위해 0으로 설정합니다.
작업자 MPM
작업자 MPM은 스레드를 사용하여 여러 연결을 처리하는 방법입니다.
이 방식은 prefork MPM보다 적은 메모리를 사용하며 동시 연결 수가 많을 때 더 높은 성능을 제공합니다.
그러나 이 접근 방식은 스레드 안전 문제로 인해 신뢰성이 떨어질 수 있습니다.
따라서 작업자 MPM은 주로 정적 콘텐츠를 제공하는 웹 사이트에 사용됩니다.
작업자 MPM 설정 방법
1. Apache 구성 파일(httpd.conf 또는 apache2.conf)에서 MPM 모듈을 로드합니다.
LoadModule mpm_worker_module modules/mod_mpm_worker.so
2. 작업자 MPM을 활성화합니다.
<IfModule mpm_worker_module>
ServerLimit 10
StartServers 2
MaxClients 10
MinSpareThreads 2
MaxSpare
Threads 5
ThreadLimit 64
ThreadsPerChild 5
MaxRequestsPerChild 0
</IfModule>
- ServerLimit: 생성할 최대 프로세스 수를 설정합니다.
- StartServers: 서버 시작 시 생성되는 프로세스 수를 설정합니다.
- MaxClients: 처리할 수 있는 최대 클라이언트 수를 설정합니다.
- MinSpareThreads: 유휴 스레드 수를 설정합니다.
- MaxSpareThreads: 유휴 스레드 수가 이 값보다 크면 일부 스레드를 종료합니다.
- 스레드: 각 프로세스가 생성하는 최대 스레드 수를 설정합니다.
- ThreadLimit: 프로세스에서 생성할 수 있는 최대 스레드 수를 설정합니다.
- ThreadsPerChild: 각 프로세스가 생성하는 스레드 수를 설정합니다.
- MaxRequestsPerChild: 각 프로세스가 처리할 수 있는 최대 요청 수를 설정합니다.
무한 처리를 위해 0으로 설정하십시오.
결론적으로
프리포크 MPM은 안정적이고 예측 가능한 성능을 제공하지만 동시 연결 수가 적을 경우 성능이 저하됩니다.
반면 Worker MPM은 메모리 사용량이 적고 동시 연결 수가 많은 경우 고성능을 제공하지만 스레드 안전 문제로 인해 안정성이 떨어질 수 있습니다.
따라서 웹사이트의 특성에 따라 적절한 MPM을 선택하여 설정하는 것이 필요하다.
이 글은 MPM 설정 방법에 대해 간략하게 소개하고 있으며, 자세한 내용은 공식 Apache 웹 서버 문서를 참고하시기 바랍니다.
MPM(프리포크, 작업자) 설정
- 프리포크
$ /usr/sbin/apachectl -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c.
$ ps -ef | grep httpd
root 25973 1 0 17:34 ? 00:00:00 /usr/sbin/httpd
nobody 25975 25973 0 17:34 ? 00:00:00 /usr/sbin/httpd
nobody 25976 25973 0 17:34 ? 00:00:00 /usr/sbin/httpd
nobody 25977 25973 0 17:34 ? 00:00:00 /usr/sbin/httpd
nobody 25978 25973 0 17:34 ? 00:00:00 /usr/sbin/httpd
nobody 25979 25973 0 17:34 ? 00:00:00 /usr/sbin/httpd
root 27527 27293 0 18:22 pts/0 00:00:00 grep --color=auto httpd
$ file /etc/sysconfig/httpd
/etc/sysconfig/httpd: ASCII English text
httpd 편집
- 주석 해제 HTTPD=/usr/sbin/httpd.worker
vi /etc/sysconfig/httpd
# Configuration file for the httpd service.
#
# The default processing model (MPM) is the process-based
# 'prefork' model. A thread-based model, 'worker', is also
# available, but does not work with some modules (such as PHP).
# The service must be stopped before changing this variable.
#
HTTPD=/usr/sbin/httpd.worker
#
# To pass additional options (for instance, -D definitions) to the
# httpd binary at startup, set OPTIONS here.
#
#OPTIONS=
$ service httpd stop
httpd 를 정지 중: ( OK )
$ service httpd start
httpd (을)를 시작 중: ( OK )
- 노동자
$ /usr/sbin/apachectl -l
Compiled in modules:
core.c
worker.c
http_core.c
mod_so.c
$ ps -ef | grep httpd
root 27793 1 0 18:26 ? 00:00:00 /usr/sbin/httpd.worker
nobody 27908 27793 0 18:26 ? 00:00:00 /usr/sbin/httpd.worker
root 27937 27293 0 18:26 pts/0 00:00:00 grep --color=auto httpd
$ ps -efL | grep httpd
root 27793 1 27793 0 1 18:26 ? 00:00:00 /usr/sbin/httpd.worker
nobody 27908 27793 27908 0 27 18:26 ? 00:00:00 /usr/sbin/httpd.worker
nobody 27908 27793 27910 0 27 18:26 ? 00:00:00 /usr/sbin/httpd.worker
nobody 27908 27793 27911 0 27 18:26 ? 00:00:00 /usr/sbin/httpd.worker
...
nobody 27908 27793 27935 0 27 18:26 ? 00:00:00 /usr/sbin/httpd.worker
nobody 27908 27793 27912 0 27 18:26 ? 00:00:00 /usr/sbin/httpd.worker