본문 바로가기

리눅스

[리눅스] 아파치 웹서버 MPM(prefork, worker) 설정 방법

728x90

아파치 웹서버 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

 

728x90