웹서버/Apache

[튜닝] MPM Worker 모델에서 설정 값

투칼론 2016. 10. 29. 23:31
반응형

Apache 2.2 버전에서 지원하게 된 스레드 방식의 worker 모델에서 설정값을 알아본다.
prefork (프로세스 방식) 모델 보다 worker 모델은 프로세스와 스레드 방식으로 작동하기 때문에 저 적은 자원으로 많은 클라이언트를 처리할 수 있어 최근에는 보통 worker 모델 방식을 설정한다.
Apache 2.4에서는 아래 옵션이 맞지않을수 있다.

<설정 예시>

<IfModule mpm_worker_module>
    ServerLimit                    5
    StartServers                   5
    MaxClients                 200
    MinSpareThreads           25
    MaxSpareThreads         100
    ThreadsPerChild             25
    MaxConnectionsPerChild    0     # 2.3.9 이전 버전에서는 MaxRequestsPerChild 
    ThreadLimit                  25
</IfModule> 



각 옵션들의 의미는 아래와 같다.


ServerLmit

  • 생성할 수 있는 child 프로세스 최대 수
  • 시스템 자원을 고려하여, 설정에서 불필요하게 httpd 프로세스가 생성되지 못하도록 ServerLimit 값을 통해 제한 가능함
  • 불필요하게 크게 설정되면, 공유 메모리를 크게 할당하므로 자원 낭비



StartServers (default : 3)

  • Apache 최초 기동시에 fork되는 child 프로세스 수
  • ServerLimit 값보다 크면, ServerLimit 값이 적용됨에 주의해야 함 (즉, 필요 시 ServerLimit 설정값을 고려해야 함)



MaxClients

  • 동시에 접속하여 처리하는 최대 클라이언트 수
  • 결국은 MaxClients / ThreadsPerChild 계산 값이 기동되어 서비스하는 Child 프로세스 수임
  • 동시 접속자가 많을 경우, 이 MaxClients 값을 증가시켜야 함.
  • 이 옵션 값이 증가하면 접속 가능한 클라이언트 수가 증가하므로, 운영체제 파라미터 중에서 최대 열수 있는 fd(file descriptor) 파라키터 값을 크게 잡을 필요가 있음




MinSpareThreads (default : 75)

  • 요청을 처리하고 있지 않는 idle 상태의 최소 스레드 수
  • 가능한한 이 MinSpareThreads 값의 수 이상 만큼 idle 상태의 수를 유지하려고 함 (필요하면 idle 스레드를 생성함)
 
 
MaxSpareThreads (default : 250)
  • 요청을 처리하고 있지 않는 idle 상태의 최대 스레드 수
  • 가능한한 이 MaxSpareThreads 값의 수 이하 만큼 idle 상태의 수를 유지하려고 함 (필요하면 idle 스레드를 삭제함)
 
     
ThreadsPerChild (default : 64)
 
  • 각 child 프로세스 당 생성 가능한 스레드 수 (이 값은 ThreadLimit 값을 초과할 수 없음)
  • 이 값이 너무 크면 스레드들끼리 race condition이 발생하여 비효율적일 수도 있음
  • 결국은 MaxClients / ThreadsPerChild 계산 값이 기동되어 서비스하는 Child 프로세스 수임
 
 
ThreadLimit (default : 64)
  • 각 child 프로세스가 생성할 수 있는 최대 스레드 수
  • 불필요하게 크게 설정하면 공유 메모리를 낭비함
  • 보통 ThreadsPerChild 수와 동일하게 설정하면 됨
 
MaxConnectionsPerChild
  • 각 child 프로세스가 처리할 최대 연결 수 
  • MaxConnectionsPerChild 설정 값만큼의 연결을 처리한 후, child 프로세스는 종료됨 
  • 보통 0 (무한대)으로 설정함
  • 2.3.9 이전 버전에서는 MaxRequestsPerChild 이었음