아파치 웹서버 MPM(prefork, worker) 설정 방법
아파치 웹 서버의 MPM (Multi-Processing Module)은 웹 서버가 처리할 수 있는 동시 연결 수와 처리 방식을 결정합니다. 아파치 웹 서버의 MPM 중에서는 prefork와 worker MPM이 있으며, 각각의 특징과 설정 방법을 알아보겠습니다.
prefork MPM
prefork MPM은 각 연결을 처리하는 프로세스를 별도로 생성하는 방식입니다. 이 방식은 안정적이고 예측 가능한 성능을 제공하지만, 동시 연결 수가 적을 경우에는 성능이 낮아집니다. 이러한 이유로 prefork MPM은 일반적으로 PHP와 같은 스크립트 언어를 사용하는 웹 사이트에서 사용됩니다.
prefork MPM 설정 방법
1. 아파치 구성 파일(httpd.conf 또는 apache2.conf)에서 MPM 모듈을 로드합니다.
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
2. prefork 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으로 설정하면 무한대로 처리할 수 있습니다.
worker MPM
worker MPM은 여러 연결을 처리하는 스레드를 사용하는 방식입니다. 이 방식은 prefork MPM보다 적은 메모리를 사용하며, 동시 연결 수가 많을 때 더 높은 성능을 제공합니다. 하지만 이 방식은 스레드 안정성 문제 때문에 안정성이 낮을 수 있습니다. 이러한 이유로 worker MPM은 정적인 콘텐츠를 제공하는 웹 사이트에서 주로 사용됩니다.
worker MPM 설정 방법
1. 아파치 구성 파일(httpd.conf 또는 apache2.conf)에서 MPM 모듈을 로드합니다.
LoadModule mpm_worker_module modules/mod_mpm_worker.so
2. worker 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: 유휴 상태의 스레드 수가 이 값보다 크면 일부 스레드를 종료합니다.
- Threads: 프로세스당 생성할 최대 스레드 수를 설정합니다.
- ThreadLimit: 하나의 프로세스에서 생성할 수 있는 최대 스레드 수를 설정합니다.
- ThreadsPerChild: 각 프로세스당 생성할 스레드 수를 설정합니다.
- MaxRequestsPerChild: 각 프로세스가 처리할 수 있는 최대 요청 수를 설정합니다. 0으로 설정하면 무한대로 처리할 수 있습니다.
결론
prefork MPM은 안정적이고 예측 가능한 성능을 제공하지만, 동시 연결 수가 적을 경우에는 성능이 낮아집니다. 반면 worker MPM은 적은 메모리를 사용하며, 동시 연결 수가 많을 때 더 높은 성능을 제공하지만, 스레드 안정성 문제 때문에 안정성이 낮을 수 있습니다.
따라서 웹 사이트의 특성에 따라 적절한 MPM을 선택하여 설정해야 합니다. 이 글에서는 MPM의 설정 방법을 간단하게 설명하였으며, 더 자세한 내용은 아파치 웹 서버 공식 문서를 참고하시기 바랍니다.
MPM(prefork, worker) 설정
- prefork
$ /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 ]
- worker
$ /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
'리눅스' 카테고리의 다른 글
[리눅스] MySQL replication을 이용한 고가용성 및 장애복구 솔루션(MMM, MHA) (0) | 2023.03.01 |
---|---|
MySQL 리플리케이션(mysql replication) 설정 방법 (0) | 2023.03.01 |
Logrotate를 설정하는 방법 (0) | 2023.02.27 |
[draft] 리눅스에서 새로운 글꼴을 추가하는 방법 (0) | 2023.02.26 |
[draft] NGINX 및 PHP에서 파일 업로드 크기 제한을 변경하는 방법 (0) | 2023.02.26 |