2011년 3월 1일 화요일

apache2 worker 방식 client 수치 설정법

ThreadLimit 은 각 설정된 스레드의 자식 프로세스가 가질 수 있는 최대 값입니다. 만약 
ThreadLimit 가 ThreadsPerChild 도 보다 높게 설정되면 불필요한 메모리가 할당되어 
비효율적이 될 수 있습니다. 또 ThreadLimit 와 ThreadsPerChild 가 동시에 시스템이 
처리할 수 있는 것보다 높게 설정되면 안정적이지 못하게 운영될 수 있습니다. ThreadLmit 
은 HP 문서에서도 언급하신것과 같이 20000 으로 컴파일될때 설정되어 있습니다. 
ThreadsPerChild 의 기본 값은 64 입니다.이것은 자식 프로세스마다 생성할 스레드 
갯수를 정의하는 것입니다. 그러므로 ThreadLimit 은 전체 스레드수 제한 갯수는 아닙니다. 
StartServers 는 초기 아파치를 구동할 당시의 자식 프로세스를 설정하는 것입니다. 
ServerLimit 은 자식프로세스와 연관지어 생각하시면 됩니다. 그러면 하나의 
자식 프로세스가 생성할 수 있는 스레드 제한을 ThreadsPerchild 에서 정의합니다. 
ServerLimit 은 Active 한 자식 프로세스를 제한 하는 것으로 보시면 됩니다. 
보통 Active 한 프로세스는 MaxClient 를 ThreadsPerchild 값으로 나눈 정도로 
생각하게 됩니다. 예를 들어, MaxClient 가 150 이고 ThreadsPerchild 가 25 라면 
ServerLimit 의 적정수치는 6 이 될 것입니다. 

그리고 MinSpareThreads 는 ThreadsPerChild 랑 같은 값으로 맞춰주시면 됩니다. 
좀 혼돈스러운게 프로세스 포크 방식과 스레드 방식에서 해당 지시어를 공용으로 사용하다 
보니 좀 복잡한 부분이 있습니다. 이 부분은 나중에 제가 시간이 되는대로 각 MPM 의 
설정 값에 대해 설명하는 문서를 작성해 볼까 합니다. 

일단 말씀하셨던 하드웨어 스펙은 상당히 좋더군요. 사용자 1800명에 동시접속 200 명 
정도면 하드웨어로서는 전혀 손색이 없습니다. (오히려 과분할 정도이죠) 
설정값은 명확히 말씀드리기가 힘듭니다. 

동시접속 500 명을 기준으로 한다면 

ServerLimit 16 
StartServers 8 
MaxClients 512 
MinSpareThreads 32 
MaxSpareThreads 64 
ThreadsPerChild 32 

이 정도면 어떨까요? 하드웨어 성능도 워낙 좋아서.. 
실제 운영을 하시면서 그에 맞는 설정을 하셔야 합니다. 그리고 필요에 따라 자료에서 
언급한 것과 같이 커널 설정도 하실 수 있습니다. 

실제 운영하시면서 관련 내용을 공유해 주시면 다른 분들한테도 도움이 될것 같습니다. 
추후에 CaseStudy 라는 것을 하나 오픈하려고 하는데 그때 이번에 운영 
하시면서 겪었던 내용을 문서로 남겨주시면 다른 유저분들이 큰 도움이 되지 
않을까 생각합니다. 

CREATE database inztimes; 
GRANT all privileges on inztimes.* TO inztimes@localhost IDENTIFIED BY 'qkdthdrnr'; 

CREATE database tradenz; 
GRANT all privileges on tradenz.* TO tradenz@localhost IDENTIFIED BY 'qkdthdrnr'; 



동시사용자 1000 명을 기준으로 한다면... 만약 
worker 방식에서 아래처럼 하면 될련지요? 

# Connect User 1000 
<IfModule worker.c> 
ServerLimit 16 
StartServers 10 
MaxClients 1024 
MinSpareThreads 64 
MaxSpareThreads 100 
ThreadsPerChild 64 
MaxRequestsPerChild 0 
</IfModule> 

댓글 없음:

댓글 쓰기