httpd 2.4 기준으로 테스트 하였으나 오랫동안 해온 방식이라 거의 대부분의 버전에서 적용될 것 같습니다.
httpd 2.4 의 경우 Thread 처리 방식이 세종류 (Prefork, Worker, Event) 있습니다.
소스파일을 수정하지 않으면 아무리 설정해도 높은값으로 구동이 안되고 특정 메세지 (AH00513: WARNING) 가 출력되는것을 볼 수 있습니다.
소스파일을 수정하고 컴파일 하면 메인보드 오버클럭 동작과 비슷하게 아파치 기본 한계치를 높여 좀 더 많은 사용자가 동시접속이 가능하게 할 수 있습니다. 다만 하드웨어 (CPU, RAM 등) 의 성능이 받춰줘야 많은 동시접속자를 수용해도 처리가 가능하므로, 저사양의 서버를 운영중인 분에게는 추천드리지 않습니다.
아파치를 설치하는 단계에서 조정해줘야 하는 부분이 있으므로 이미 설치하여 사용중인분은 페이지 맨 아랫부분 옵션 적용 먼저 해보고 Syntax 에러가 없으면 그대로 사용하셔도 됩니다.
에러가 발생하면 아파치를 재설치 해주어야 하는데, 아파치를 설치하기전 소스파일을 수정해야 합니다.
# wget https://archive.apache.org/dist/httpd/httpd-2.4.56.tar.gz
# tar xvzf httpd-2.4.56.tar.gz
# cd httpd-2.4.56
동시접속 최대값을 수정합니다.
여기에서는 2048명의 동시접속을 허용하도록 하겠습니다.
참고로 수정해야 할 곳 앞에 # 이 있는데 이는 주석이 아니므로 삭제하지 않도록 합니다.
# vi server/mpm/prefork/prefork.c
#define DEFAULT_SERVER_LIMIT 2048 // 기본값 : 256 |
# vi server/mpm/worker/worker.c
#define DEFAULT_SERVER_LIMIT 32 // 설정한 값에 64를 곱하면 최대 동시접속자 32 * 64 = 2048 (기본값 : 16) |
# vi server/mpm/event/event.c
#define DEFAULT_SERVER_LIMIT 32 // 설정한 값에 64를 곱하면 최대 동시접속자 32 * 64 = 2048 (기본값 : 16) |
httpd 설치는 생략합니다. 설치는 다른 포스팅을 참고해 주시고 ( https://sysdocu.tistory.com/397 )
./configure 명령 실행할때 아래 처럼 원하는 MPM 을 옵션으로 추가하면 됩니다.
--with-mpm=worker
아래는 httpd 설치 후 확인 방법입니다.
사용하는 MPM 종류
# /usr/local/apache/bin/apachectl -V |grep MPM
Server MPM: worker
모듈 로드 상태
# /usr/local/apache/bin/httpd -t -D DUMP_MODULES |grep mpm
mpm_worker_module (static)
예제에서는 worker 를 사용하는것이 확인되었습니다.
# vi /usr/local/apache/conf/httpd.conf
Include conf/extra/httpd-mpm.conf // 주석 해제 |
아래 값을 적절히 수정합니다. MaxRequestWorkers 부분이 최대 동시접속자 수 입니다.
# vi /usr/local/apache/conf/extra/httpd-mpm.conf
<IfModule mpm_worker_module> StartServers 32 ServerLimit 64 // 기존에 없는 옵션이므로 추가해 줍니다 MinSpareThreads 100 MaxSpareThreads 500 ThreadsPerChild 64 MaxRequestWorkers 2048 MaxConnectionsPerChild 0 </IfModule> |
* 옵션 설명
- StartServers : Apache 서버 가동시 생성되는 프로세스 수
- ServerLimit : Apache 서버가 생성할 수 있는 최대 프로세스 수
값의 공식은 MaxRequestWorkers / ThreadsPerChild = ServerLimit 이지만 이와 같거나 큰 값으로 설정하는 것이 좋습니다.
(여기에서는 2048 / 64 = 32 이지만 두배 큰수로 64 를 입력)
이 값은 시스템의 하드웨어 성능과 용량에 따라 조정되어야 합니다.
- MinSpareThreads : 최소 유지 스레드 수
프로세스는 항상 최소 설정값 (여기에서는 100) 만큼의 유휴 스레드를 유지하려고 노력합니다.
이는 웹 서버의 성능을 유지하기 위해 필요한 최소한의 스레드 수입니다.
- MaxSpareThreads : 최대 유지 스레드 수
웹 서버가 생성한 스레드 중에 유지할 수 있는 최대 스레드의 수 (여기에서는 500) 를 결정합니다.
이 값 이상의 스레드가 생성되면, 일부 스레드는 자동으로 종료되어 시스템 자원을 절약합니다.
- ThreadsPerChild : 프로세스 당 스레드 수
ThreadsPerChild가 64로 설정되어 있고, MaxSpareThreads가 500으로 설정되어 있다면,
하나의 프로세스 내에서 최대 64개의 스레드를 생성할 수 있으며, 이 중 최대 500개의 스레드는 유지됩니다.
- MaxRequestWorkers : 최대 동시 접속자 수
서버가 처리할 수 있는 최대 요청 수를 결정하는 설정으로, 이 값을 증가시키면 동시에 처리할 수 있는 요청 수가 증가합니다.
- MaxConnectionsPerChild : Apache 서버에서 한 프로세스가 처리할 수 있는 최대 연결 수 (0 : 무제한)
httpd 설정 문법에 이상여부를 체크해보고 데몬을 재시작하여 적용합니다.
# /usr/local/apache/bin/apachectl -t
Syntax OK
# /usr/local/apache/bin/apachectl restart