서버호스팅, 코로케이션, 매니지드호스팅, IDC, 도메인, 웹호스팅 - KOREA IDC
KOREA IDC 바로가기 차이나 다이렉트 기업망 바로가기
 
  • 원격제어
  • 서버관리
  • 매니지먼트
  • 원격
  • 서버
    관리
  • 매니지
    먼트

Apache의 Worker / Prefork 방식의 차이점과 세팅 방법 22722
2013/11/06 15:36:49
1.
리눅스에서 Apache 멀티 프로세스에 관련된 모듈(MPM)에는 대표적으로 worker / prefork 두가지가 있습니다.
 
Prefork 방식 : 한 자식프로세스당 하나의 쓰레드를 사용하는 방법
기본 사용 메모리가 worker보다 높으며 프로세스 간 메모리를 공유하지 않는 독립 형태이므로 안정적임.
아파치 컴파일시 옵션 추가하지 않을경우 기본으로 이 모듈로 동작합니다.
 
Worker 방식 : 한 자식프로세스당 여러개의 쓰레드를 사용하는 방법
기본 사용 메모리는 prefork보다 낮으며 쓰레드 간에 메모리를 서로 공유함.
동시접속자가 많은 사이트에 적합합니다.
 
 
 
2.
원하는 모듈로 설치하기에 앞서 httpd-2.2.22 버전으로 테스트 하였습니다.
(httpd 1.x 버전은 prefork 방식만 가능하며 worker는 2.x부터 가능합니다.)
 
최대 동시접속자 수 2048로 설정할 경우 컴파일 하기 전 소스에서 수정을 합니다.
                                                                                                                                         
[root@ns1 ~]# perl -pi -e "s/SERVER_LIMIT 256/SERVER_LIMIT 2048/g" server/mpm/prefork/prefork.c
[root@ns1 ~]# perl -pi -e "s/SERVER_LIMIT 16/SERVER_LIMIT 32/g" server/mpm/worker/worker.c
                                                                                                                                          
                 
아파치설치폴더/server/mpm/prefork/prefork.c 파일에서
#define DEFAULT_SERVER_LIMIT 2048 (256 -> 2048로 변경)
 
아파치설치폴더/server/mpm/worker/worker.c 파일에서
#define DEFAULT_SERVER_LIMIT 32 (16 -> 32로 변경)
 
※ worker는 한 프로세스에 여러 쓰레드 방식이므로 프로세스 갯수와 쓰레드 갯수를 곱하여 최대접속자수를 설정합니다.
32 * 64 = 2048
#define DEFAULT_SERVER_LIMIT 32
#define DEFAULT_THREAD_LIMIT 64
 
 
 
3.
컴파일 시 worker / prefork 구분하여 컴파일 옵션을 줍니다.
 
예) worker 경우
                                               
[root@ns1 ~]# ./configure \
--prefix=/usr/local/apache \
--enable-mods-shared=all \
--enable-module=shared \
--enable-rewrite \
--enable-ssl \
--with-ssl \
--with-mpm=worker \
--with-included-apr
                                               
 
prefork의 경우엔 따로 옵션을 주지 않거나 with-mpm=prefork 로 주고 진행하면 됩니다.
 
make && make install
 
 
 
4.
설치 후 컨피그 설정에서 최대접속자 설정을 합니다.
 
vi 아파치설치경로/conf/extra/httpd-mpm.conf
 
설치한 모듈을 제외한 다른모듈 부분은 전부 주석처리하여도 됩니다.
 
 
worker 모듈의 경우
 
StartServers : 아파치 시작시 생성되는 기본 프로세스 갯수
ServerLimit : 최대 실행가능한 프로세스 갯수
MaxClients : 최대동시접속자수 (프로세스 * 쓰레드, 소스에서 설정한 최대동시접속자수까지 가능)
MinSpareThreads : 최소로 유지할 쓰레드 갯수
MaxSpareThreads : 최대로 유지할 쓰레드 갯수
ThreadsPerChild : 하나의 자식프로세스가 가질 수 있는 쓰레드 갯수
MaxRequestsPerChild : 자식프로세스가 살아있는동안 요청을 받을 갯수 (0은 무한대, 메모리누수의 경우 메모리 사용양 제한가능)
 
 
prefork 모듈의 경우
 
                 
StartServers : 아파치 시작시 생성되는 기본 프로세스 갯수
MinSpareServers / MaxSpareServers : 아파치 실행중에 유지할 최소/최대 프로세스의 갯수
(worker와 달리 절대적인 수치는 아니며 서버로 요청이 많아지면 그만큼 갯수가 초과될수 있음)
MaxClients : 아파치 시작시 최대로 실행할 자식프로세스의 갯수
 
프로세스나 쓰레드 갯수 설정은 현재의 서버사양과 동시접속자수를 고려하여 설정하면 됩니다.
 
 
5.
현재 설치되어있는 아파치의 mpm 확인할 경우 httpd -V 명령어로 확인가능합니다.
 
 
Server MPM 부분에서 Prefork인지 Worker인지 알 수있습니다.
 
또한 httpd -l 로 확인가능합니다.
 
 
 
6.
이벤트 등으로 동시접속자 증가로 인하여 사이트 응답이 매우 느릴경우 아래와 같은 방법으로 속도향상이 가능합니다.
 
 a. 아파치 설정에서 KeepAlive를 Off로 설정하면 응답후 연결유지를 하지않고 바로 연결을 끊어버리므로 속도향상에 효과적입니다.
 
 b. prefork 모듈 사용중에 메모리 부족 현상을 겪을 경우 worker 방식으로 변경하면 메모리와 CPU 소비가 약간 줄어듭니다.
 변경하더라도 메모리가 부족할 경우 물리적인 메모리를 증설하여야합니다.
 
 c. 아래의 명령어로 현재 요청으로 연결된 갯수를 확인하여 최대 동시접속자 수가 너무 적을 경우 httpd-mpm.conf 를 적절하게 수정하여야 하며,
 설정보다 최대 동접자수가 적을 경우 소스에 수정을 하고 재컴파일 해야 됩니다. (DEFAULT_SERVER_LIMIT 값 수정)
 
 
 
 d. 동시접속자 수 제한을 풀었으나 서버 자체 사양의 한계로 버티지 못하여 서비스 자체가 다운될 경우,
 오히려 동시접속자 수 제한을 걸어서 서비스를 유지하는 방법을 이용하여야 합니다.
 
 
worker 방식으로 변경하더라도 한개의 요청에 대한 응답속도가 빨라지지는 않습니다.
동시접속자와 상관없이 지연시간이 발생할경우 CDN 서비스를 이용하시는게 적합합니다.
2013-11-25 16:54:20 에 내용이 수정되었습니다.
ucxjstjs  (2014-08-11 00:18:46)
1
홍기성  (2014-09-23 09:30:11)
좋은글 감사합니다.
최진백  (2015-08-19 03:01:48)
감사합니다. 많은 도움 되었습니다.
  
107 iis 설정 백업/복원, 이전 [0] 2015/05/15 13953
106 컴파일 빠르게 하기 [0] 2015/05/06 10247
105 rsync 및 scp 사용법 과 활용방법 [0] 2015/01/29 25936
104 프로세스 우선순위를 결정하는 nice(niceness) 와 renice 사용법 [0] 2014/12/01 17047
103 Htop( Linux Process Monitoring )사용법 [0] 2014/11/26 11698
102 (리눅스) volatility를 이용한 메모리 덤프 점검 [0] 2014/04/09 16843
101 nslookup 사용 방법 [0] 2013/12/20 11826
100 apache log rotate [0] 2013/12/13 11307
99 mysql에 입력했던 명령어(history)를 보기 [0] 2013/11/24 19029
98 named 체크 사용방법 [0] 2013/11/22 8221
97 mysql 설치 옵션 , 추천 옵션 정리 [0] 2013/11/20 7583
96 화이트 도메인 (White Domain) 등록 및 확인 방법 [0] kyo0162 2013/11/20 9265
Apache의 Worker / Prefork 방식의 차이점과 세팅 방법 [2] 2013/11/06 22723
94 mysql 5.6 설치 메뉴얼 [1] 2013/11/05 11664
93 whois, dig 사용방법 [0] 2013/11/01 6954
맨앞 이전  |1|2|3|4|5|6|7|8|  다음 맨뒤

하단메뉴
(주)인터넷나야나, 서울시 금천구 디지털로9길 99, 1107호(가산동) 전화: 1661-0900, 02-852-4745; 팩스: 02-852-4744
패밀리사이트
회사소개(새창열림) IDC소개 이용약관 개인정보취급방침 이메일무단수집거부 사이트맵 고객센터 인터넷나야나 바로가기(새창열림) 예로 바로가기(새창열림) 내선안내 메일보내기 server@koreaidc.com
네이버키워드광고
워드프레스호스팅