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>
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>