[리눅스] 아파치 웹서버

Apache 웹 서버 MPM 구성 방법(Prefork, Worker)

Apache 웹 서버의 MPM(Multi-Processing Module)은 웹 서버가 처리할 수 있는 동시 연결 수와 이를 처리하는 방법을 결정합니다.

아파치 웹서버 MPM 중에는 prefork와 worker MPM이 있는데 각각의 속성과 설정 방법에 대해 알아보겠습니다.

기본 MPM

프리포크 MPM은 각 연결을 처리하기 위해 별도의 프로세스를 생성하는 방법입니다.

이 접근 방식은 안정적이고 예측 가능한 성능을 제공하지만 동시 연결 수가 적으면 성능이 저하됩니다.

이 때문에 prefork MPM은 PHP와 같은 스크립팅 언어를 사용하는 웹 사이트에서 일반적으로 사용됩니다.

Prefork MPM 설정 방법

1. Apache 구성 파일(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으로 설정하십시오.

작업자 MPM

작업자 MPM은 스레드를 사용하여 여러 연결을 처리하는 방법입니다.

이 방법은 prefork MPM보다 적은 메모리를 사용하며 동시 연결 수가 많을 때 더 나은 성능을 제공합니다.

그러나 이 접근 방식은 스레드 안전 문제로 인해 신뢰성이 떨어질 수 있습니다.

이러한 이유로 Worker 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