apache mpm worker 설정

* 현재 worker 모듈 설치 되었는지 확인법
– “httpd -l” 명령으로 현재 설치된 Apache가 worker방식으로 설치되었는지 확인할 수 있다.
============================================
# httpd -l
Compiled in modules:
core.c
worker.c
http_core.c
mod_so.c
============================================

또는, httpd -V 명령으로 확인 가능하다. (V는 대문자)
============================================
# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: Jun 30 2010 16:59:45
Server’s Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 32-bit
Server MPM: Worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with….
-D APACHE_MPM_DIR=”server/mpm/worker”
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=”/home/paint/apache-2.2.15″
-D SUEXEC_BIN=”/home/paint/apache-2.2.15/bin/suexec”
-D DEFAULT_SCOREBOARD=”logs/apache_runtime_status”
-D DEFAULT_ERRORLOG=”logs/error_log”
-D AP_TYPES_CONFIG_FILE=”conf/mime.types”
-D SERVER_CONFIG_FILE=”conf/httpd.conf”
=============================================

2. 설정

1) httpd.conf 수정
– 아래와 같이. “Include conf/extra/httpd-mpm.conf” 설정의 주석을 제거한다.(기본적으로 주석처리 되어 있음)
===============================

# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf

===============================

2) httpd-mpm.conf 수정
– 경로 : $APACHE_HOME/conf/extra/httpd-mpm.conf
* httpd.conf에서 설정한 경로를 따라간다.

============================

ServerLimit 16 => 구성가능한 child 프로세스의 재한 수
StartServers 16 => 시작시에 초기화되는 서버 프로세스의 개수 (default : 3) / prefork default:5, mpmt_os2 default 2
MaxClients 150 => 동시에 접속할 수 있는 Client의 상한, 즉 Precess 수 x Thread 수
MinSpareThreads 25 => 새로운 방문자를 바로 처리하기 위하여 대기하고 있는 최소 쓰레드 개수
MaxSpareThreads 75 => 새로운 방문자를 바로 처리하기 위하여 대기하고 있는 최대 쓰레드 개수(보통 ThreadsPerChild 값이랑 같게 설정)
ThreadsPerChild 25 => 프로세스당 쓰레드 수(ThreadLimit와 거의 같은 의미)
MaxRequestsPerChild 0 => 자식프로세스가 서비스할 수 있는 최대 요청 개수(0은 무한대),
오래된 프로세스들을 죽이고 새로운 프로세스를 시작하는 것에 의해 프로세스 리사이클 주기를 얼마나 할지 설정

============================

* 프로세스 개수
– Active Child Process의 최대 개수는 MaxClients 값과 ThreadsPerChild 값의 의해서 계산된다.
– 만약, MaxClients를 4096으로 하고, ThreadPerChild를 128로 하면
MaxClients(4096) / ThreadPerChild(128) = 32
따라서 32개의 프로세스가 생성된다.
– 이 수치를 변경할 경우 Apache를 완전히 재시작 해야 함.

3. 옵션 세부 설명

ServerLimit (default : 16)
– 구성 가능한 child 프로세스의 제한 수.
– 이 ServerLimit 값이 필요 이상 높게 설정 된다면, 쓸데 없이 미사용 공유 메모리가 할당 되므로 적절하게 설정 필요.
– MaxClient 와 ThreadPerChild 에서 요구한 프로세스 수보다 높게 설정하지 말 것.

StartServers (default : 3)
– Apache기동시에 띄울 프로세스 개수
– 자식 프로세스의 수는 부하에 따라 동적으로 변경되기 때문에 이 설정은 큰 의미가 없다.

MaxClient (default : ServerLimit x ThreadsPerChild)
– 동시에 처리될 최대 커넥션(request)의 수
– MaxClients 수치를 초과한 후 온 요청들은 ListenBackLog에 의해 큐잉됨
– ThreadsPerChild 옵션과 매우 긴밀하게 작용함
– 동접자가 많을 경우, 이 MaxClient값을 증가시켜야 함.
– OS의 FD(File Descriptor)값을 증가 시켜 MaxClient 의 상한값을 증가시키도록 할 것.

MinSpareThreads (default : 75)
– Request spike를 처리할 최소 idle 쓰레드 수
– 만약 서버에 idle 쓰레드가 충분하지 않다면 child 프로세스는 idle 쓰레드가 MinSpareThreads 보다 커질때까지 생성된다.

MaxSpareThreads (default : 250)
– Idle 쓰레드의 최대 수
– 만약 서버에 너무 많은 idle 쓰레드가 존재하면 child 프로세스는 idle 쓰레드가 MaxSpareThreads 수보다 작아질 때까지 죽는다.

ThreadsPerChild (default : 64)
– 각 child 프로세스가 생성한 쓰레드 수
– Child 프로세스는 기동시 ThreadsPerChild 개수만큼 쓰레드를 생성하고 결코 더 이상 생성하지 않는다.
– 만약 worker 방식의 MPM을 사용중이라면, 전체 쓰레드 수는 평상시 부하를 처리할 만큼 충분히 많아야만 한다.

MaxRequestsPerChild
– 각 각의 child 프로세스가 처리할 request의 수를 제한.
– MaxRequestsPerChild 개수를 처리한 후, child 프로세스는 종료(die)된다.
– 0으로 설정하면 무한대
– MaxRequestsPerChild 를 0 이외의 값으로 설정하는 것은 프로세스가 (혹시나) 메모리 누수로 사용할 수 있는 메모리 양을 제한한다.

ThreadLimit (default : 64)
– child 프로세스의 라이프주기 동안 ThreadsPerChild 의 최대 설정값을 설정한다.
– 이 지시자를 사용할 때는 특별한 주의가 필요하다.
– ThreadLimit 가 ThreadsPerChild 보다 훨씬 높게 설정된다면, 여분의 미사용 공유 메모리가 할당될 것이다.
– ThreadLimit 과 ThreadsPerChild 모두 시스템이 다룰 수 있는 것 보다 높게 설정한다면, 아파치가 기동되지 않거나 시스템이 불안정하게 될 수 있다.
– 이 지시자를 당신의 최대 예상 ThreadsPerChild 의 설정보다 높게 설정하지 마라.

3 Comments so far:

  1. master says:


    ServerLimit 128
    StartServers 32
    MaxClients 4096
    MinSpareThreads 32
    MaxSpareThreads 75
    ThreadsPerChild 32
    MaxRequestsPerChild 64

  2. master says:


    ServerLimit 64
    MaxRequestWorkers 8192
    ThreadLimit 512
    StartServers 2048
    MinSpareThreads 2048
    MaxSpareThreads 2048
    ThreadsPerChild 256
    MaxConnectionsPerChild 0

Leave your Comment

Your email address will not be published. Required fields are marked *