웹서버/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 이었음