본문 바로가기

Linux

Apache mpm 확인 / Apache 최적화 및 튜닝

Apache MPM

Apache Multi Processing Modules

아파치 서버가 받아들인 요청을 처리하기 위해 자식프로세스에게 분배하는 방식입니다.

종류는 prefork, worker, event 방식이 있습니다.

리눅스의 경우 특정 mpm 지정하여 설치하지 않을 경우 prefork가 default.

원하는 mpm 설정이 있다면, 아파치 컴파일 시 -with-mpm=prefork 또는 -with-mpm=worker 옵션 추가해서 컴파일하면 됩니다.

 

 

 

 

MPM 종류

1. prefork

하나의 자식 프로세스가 하나의 스레드를 갖는 구조.

자식 프로세스 최대 1024개까지 가능.

안전하지 않은 제 3자가 만든 모듈 사용 가능.

single CPU 또는 Dual CPU에서 성능이 좋음.

장점 : 구조가 간단하고 구현이 쉬움. 사용자가 많지 않고 안정적 운영이 필요한 경우 적합한 방식.

단점 : 한 클라이언트가 맺은 접속이 완전하게 끝나지 않으면 스레드 및 프로세스가 죽지 않습니다. 이로 인해 접속당 CPU와 메모리 사용이 증가하여 성능 저하가 발생

-> 프로세스가 메모리를 많이 차지함.

2. worker

prefork보다 메모리 사용량 적음.

프로세스 당 연결이 여러개이며, 최대 64개의 연결 처리가 가능합니다.

자식 프로세스들이 각 여러 스레드를 사용하고, 각 스레드는 한번에 한 연결을 담당합니다.

멀티 CPU 시스템에서 성능이좋음.

장점 : 통신량 많은 서버 (동시접속자가 많은 사이트)에 적합한 방식.

단점 : 스레드가 메모리를 공유하여, 서로 다른 스레드에 영향을 줌.

 

3. event

prefork와 worker의 장점을 사용한 방식

apache 2.4 버전 이상에서 사용 가능

동시접속자 수가 많거나, 확장성이 필요한 사이트는 worker 방식을 선택하고,

안정성과 오래된 소프트웨어와 호환성이 필요한 사이트는 prefork 방식을 선택해서 사용하면 됩니다.

※prefork 방식 사용시 keepalive 설정 사용 (대량 접속시 효율적 문제)

-> keep alive 옵션 on으로 적용 시 , 클라이언트와 아파치 간의 연결을 keepalivetimeout 동안 유지하게 됨.

-> 사이트 접속자 수가 많고, 요청량이 많은 웹서비스를 운영하는 경우, keepalivetimout을 3초~5초로 짧게 설정하는것이 좋음

keepalive 설정을 길게 가져갈 경우 불필요한 세션을 유지하게 되고 서버 메모리 사용량이 높아져서, 서비스가 되지 않는 현상이 발생할 수 있음.

-> 사이트 접속자 수가 적고, 요청량이 적은 웹서비스를 운영하는 경우 keepalivetimeout을 30초~60초로 길게 설정하는것이 좋음

 

 

 

 

mpm 설정 확인

# httpd -V

현재 동시접속자 수 확인

# netstat -nltp |grep :80.*ESTABLISHED |wc -l

아파치 메모리 사용률

# ps aux | grep apache | awk '{print $6}' | awk '{total = total + $1} END {print total/1024}'

 

 

 

mpm 설정

아파치 소스 설치의 경우 mpm 방식을 변경하고 싶다면 재컴파일을 진행해야 합니다.

원하는 설정으로 재컴파일 후 mpm설정파일을 수정해서 원하는 옵션값으로 변경해줍니다.

추가로 php가 설치되어있다면 apache와의 연동을 위해 php 재컴파일 작업도 진행해줘야합니다.

아파치 yum 설치의 경우 mpm 방식을 변경하고 싶다면 mpm 설정파일만 수정하면 원하는 mpm 방식으로 바로 적용됩니다.

'Linux' 카테고리의 다른 글

linux 시간동기화 ntp, rdate  (0) 2022.11.10
apache Http에서 Https로 리다이렉트 설정  (0) 2022.11.06
php.ini 설정값 정리  (0) 2022.10.23