메뉴 건너뛰기

조회 수 40 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


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 서비스를 이용하시는게 적합합니다.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
48 Apache APM 설치 apache 2.4 / php 5.5 / mariadb 10.0 맨하탄노숙자 2017.05.23 4
47 Apache APM 맨하탄노숙자 2017.02.06 100
46 PHP How To Use Systemctl to Manage Systemd Services and Units 맨하탄노숙자 2016.07.19 43
45 PHP php-fpm systemctl 추가 맨하탄노숙자 2016.07.19 37
44 php gd-library 소스 경로 및 컴파일 옵션 맨하탄노숙자 2016.04.17 52
43 PHP PHP 5.2.17 컴파일시 오류 발생 file 맨하탄노숙자 2016.04.17 50
42 Apache 스토리지 웹서버 secret 맨하탄노숙자 2016.04.17 0
» Apache Apache의 Worker / Prefork 방식의 차이점과 세팅 방법 맨하탄노숙자 2016.04.17 40
40 Apache [CENTOS] apache web server switching from prefork to worker MPM 맨하탄노숙자 2016.04.17 124
39 PHP PHP 4 Memcache 맨하탄노숙자 2016.03.06 80
38 NGINX nginx location 설정 맨하탄노숙자 2016.02.18 99
37 NGINX nginx 파일 공유 및 암호 설정하기 맨하탄노숙자 2016.02.18 209
36 NGINX nginx에서 동영상 스트리밍 서비스하기 맨하탄노숙자 2016.02.18 63
35 PHP PHP/cURL download progress monitoring 맨하탄노숙자 2016.02.15 46
34 PHP cURL download progress in PHP file 맨하탄노숙자 2016.02.15 109
33 이미지 다운로드시 다운로드 진행상황 표시 file 맨하탄노숙자 2016.02.15 86
32 PHP 파일 업로드 진행상황표시 file 맨하탄노숙자 2016.02.15 83
31 PHP 다운로드 구현 상태 (진행 상황 표시) 맨하탄노숙자 2016.02.15 70
30 PHP UTF-8 파일 다운로드 함수 맨하탄노숙자 2016.02.15 80
29 PHP down.php 다운로드 구현 맨하탄노숙자 2016.02.15 130
Board Pagination Prev 1 2 ... 3 Next
/ 3