아파치 설정관련~~(startServers, MaxSpareServers) 값에 따른 차이??
본문
root@server:/etc/apache2# netstat -nap | grep :80 | grep ESTABLISHED | wc -l
1755
일반적인 접속 시 1700~ 2000 정도입니다.
아래와 같이 아파치 설정을 변경하였습니다.
StartServers, MaxSpareServers 값을 변경하는것이 의미가 있을지?
<IfModule mpm_prefork_module>
ServerLimit 4096
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 4096
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_prefork_module>
ServerLimit 4096
StartServers 10
MinSpareServers 5
MaxSpareServers 15
MaxClients 4096
MaxRequestsPerChild 0
</IfModule>
답변 1
아파치의 풀 관리 방식으로는 두가지 형태가 주로 사용됩니다.
하나는 prefork MPM 방식으로 프로세스를 미리 분기하여 쓰레드가 한개의 자식 프로세스를 여러개 사용하는 방식입니다.
prefork 방식은 쓰레드에 안전하지 않는 PHP등을 사용하기에 적합합니다.
StartServers 는 몇 개의 자식 프로세스를 미리 띄워놓을 것인가를 결정하고 MinSpareServers, MaxSpareServers는 아파치서버가 얼마나 많은 프로세스들이 요청을 기다리고 있는지 주기적으로 점검을 하게 되는데 이때 Min값보다 작으면 프로세스를 이 값으로 설정한 만큼 다시 만들어내고 Max값 보다 많아지게 되면 이 값으로 설정한 만큼 일부 프로세스를 종료 합니다.
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
worker MPM 방식은 여러 자식 프로세스가 각각 여러개의 쓰레드를 사용하며, prefork 방식에 비해 적은 메모리를 사용하여 확장성을 요구하는 곳에 적합합니다.
StartServers는 처음에 실행될 프로세스 개수이고 MinSpareThreads,MaxSpareThreads는 각 자식 프로세스가 이 지시작에 의해서 설정된 값 만큼의 고정된 쓰레드를 생성합니다.
<IfModule mpm_prefork_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
결과적으로 아파치의 풀 관리 방식의 설정 차이만 있을 뿐 약간의 미세 조정은 큰 차이가 없습니다.