출처 : https://m.blog.naver.com/forioso/221037246339
[아파치 성능튜닝]
요즘 서버 관리할때 서비스가 필요하면 새로 컴파일 하지 않고 yum 을 사용해서 설치해 버린다. 왜냐 설치...
blog.naver.com
요즘 서버 관리할때 서비스가 필요하면 새로 컴파일 하지 않고 yum 을 사용해서 설치해 버린다.
왜냐 설치나 유지 관리가 쉽다.
소스 설치를 해서 운영하다 새로운 모듈이 필요하면 서버이라던지 이런거 신경쓰면서 새로 컴파일 해야 되고....
yum 사용이후엔 그 편함에 컴파일하기 싫어 진다.
어쨋던....
기본 yum으로 서비스를 하더라도 일정 수준이상의 서비스를 하게 되면 튜닝이 필요하다.
아파치.. 지금 yum으로 설치하면 2.4.6 버전이 설치된다. (1달후엔 어케 될지 모른다. ㅋ)
2.4 버전에 apache 를 설치후에 서비스를 운영했다.
그런데 프로세스가 256 개 뜨더니 더이상 생성되진 않는다.
아직 서버 CPU 나 메모리의 여력은 있다.
| # httpd -V |
| Server version: Apache/2.4.6 (CentOS) Server built: Nov 19 2015 21:43:13 Server's Module Magic Number: 20120211:24 Server loaded: APR 1.4.8, APR-UTIL 1.5.2 Compiled using: APR 1.4.8, APR-UTIL 1.5.2 Architecture: 64-bit Server MPM: prefork threaded: no forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/etc/httpd" -D SUEXEC_BIN="/usr/sbin/suexec" -D DEFAULT_PIDLOG="/run/httpd/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf" |
기본 설치를 하면 prefork 방식으로 설치된다.
아파차 MPM 이란?
(Multi-Processing-Module ) 다중처리 모듈
아파치는 받아들이는 요청을 처리하기 위해서 자식 process에게 요청을 분배하는데 2가지 방식으로 처리한다.
Prefork MPM
하나의 쓰레드를 가진 다수의 자식 프로세스를 사용.각각의 프로세스는 하나의 커넥션을 담당한다.
실행중인 프로세스를 복사하여 자식 프로세스를 만드는데 이때 메모리까지 복사하여 많은 메모리를 사용한다.
CPU 가 1~2개일때 성능이 좋다.
Worker MPM
다수의 쓰레드를 지닌 다수의 자식 프로세스를 사용. 각각의 쓰레드가 하나의 커넥션을 핸들링한다.
쓰레드간 메모리를 공유한다. 멀티 CPU 일때 성능이 좋다.
Event MPM
2.4 버전부터 새로 생긴 모드.
Nginx 처럼 Event driven 방식으로 성능이 뛰어나다.
Prefork 는 복제된 프로세스가 사용자를 담당하므로 복제에 메모리 리소스를 사용하여 메모리가 높아지지만 별개로 프로세서가 동작 하므로 하나의 프로세스가 오동작시 다른 프로세스에 영향을 미치진 않아서 안정성이 높다.
Worker 는 쓰레드가 사용자 커넥션을 핸들링 하여 하나의 프로세스가 오동작시 해당 프로세스를 컨트롤 하는 쓰레드에 있는 모든 프로세스에 오동작을 일으킬 수 있다. 하나의 쓰레드는 64개로 프로세스를 제한하여 Worker의 오동작 범위를 제한한다.
Prefork 는 안정성 Worker 는 성능 이라고 할 수 있다.
새로운 모듈을 사용하지 않는 안정적인 환경이라면 Worker 로 성능을 높이는 것도 방법이다.
MPM 변경은 아래에서 할수 있다.
| #vi /etc/httpd/conf.modules.d/00-mpm.conf |
아파치의 기본 설치는 안정성을 위해 Prefork 방식으로 설치된다.
기본으로 프로세스는 256으로 제한이 걸려 있다.
일단 제한을 늘려보자. /etc/httpd/conf.d 폴더에 아래 파일을 생성후 재시작 하면 된다.
| mpm_prefork.conf |
| <IfModule mpm_prefork_module> ServerLimit 1024 StartServers 100 MinSpareServers 25 MaxSpareServers 50 MaxClients 1024 MaxRequestsPerChild 10000 KeepAlive Off Timeout 10 </IfModule> |
이파일만으로도 동시접속자수는 1024로 늘어난다.
이는 당연하게 처리시 메모리도 같이 늘어 나게 된다.
MaxRequestsPerChild 는 ChildProcess의 요청을 몇개나 처리하고 죽을지를 설정한다. 0은 무한대인데 이론적으론 좋을거 같으나 메모리 누수가 있을때 문제가 생긴다. 그래서 0 설정은 비추천한다.
KeepAlive 는 서버 리소스가 충분하다면 On으로 사용해도 되나 트래픽이 몰려서 서버 리소스가 부족하다면
KeepAlive Off 로 설정한다.
Timeout 은 기본 60이나 1분동안 기다리면서 대기 카운트를 올리는거보다
10 초 정도로 낮추어 트래픽에 대비한다.
위 설정만으로도 버벅이던 서버가 정상화 되었다.
아래는 권장 수치를 퍼왔다.
|
2.4 기본 수치들
'프로그램개발 > Linux(Apache.vim)' 카테고리의 다른 글
| 2022년 오픈소스 참고 (0) | 2022.10.26 |
|---|---|
| [서버운영] 서버의 메모리는 그리 넉넉하지 않습니다. (0) | 2022.08.11 |
| Apache 동시접속자수 확인 (0) | 2022.08.01 |
| Vim 9.0 출시…새 스크립트 언어 도입 (0) | 2022.07.05 |
| Linux서버에 sass 설치 메세지..참고용 (0) | 2021.10.04 |