Welcome :っ)

Devlog/Apache

Apache MPM worker / Apache 웹서버 성능 최적화

lazy.won 2021. 8. 11. 19:52
728x90
반응형

 

 

 

 

서비스 가입자 수가 150만 명을 돌파하면서 동시 접속자 수가 급격히 증가하여 서버가 다운되었던..! 

잠 못 잤던 그때로 돌아가 보려고 한다. 

 

 

 

아파치 동시접속자 튜닝, 아파치 최적화에 대해 알아보다가 Apache MPM 설정 관련하여 공부하게 되었다. 

 

먼저 Apache MPM에 대해 알아보자!!

 

 

 

 

 

 

Apache MPM 이란?

MPM은 Multi Processing Module의 약자로 번역하면 "다중 처리 모듈"인데, Apache HTTP 서버에서 클라이언트로부터 받은 요청을 어떤 방식으로 처리할 것인지를 결정하는 모듈이다. 
Apache MPM은 prefork, worker, event 방식이 있다. 

 

아파치 웹서버는 다양한 환경의 다양한 플랫폼에서 동작할 수 있도록 유연하게 설계되었다. 웹마스터는 컴파일 시 혹은 실행 시 어떤 모듈을 읽어 들일지 선택하여 서버에 포함할 기능을 결정할 수 있다. 그중 다중처리 시 프로레스와 스레드 생성 방식을 어떻게 관리할 지에 대한 다중처리 모듈이 있다. 

 

 

그래서 다중처리 모듈(Multi-Processing Modules, MPMs)이란??

 

 

쉽게 말해, 여러 이용자(웹브라우저)가 웹페이지에 동시에 접속할 때 요청을 동시에 처리할 수 있도록 해주는 아파치 웹서버의 모듈이다. MPM은 받아들인 요청을 처리하기 위해 자식 프로세스들에게 분배한다. 

MPM은 아파치 서버의 다른 모듈들과 마찬가지로 Sahred Object 파일 (. so)로 만들어져 아파치 웹서버에 Load 된다. 

 

 

 Process Thread에 대해 간략히 개념을 잡아보자 !!

Process
OS에 의해 메모리 공간을 할당받아 실행 중인 프로그램
프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원, 스레드로 구성된다.

Thread
프로세스 내에서 실제로 작업을 수행하는 주체
모든 프로세스는 한 개 이상의 스레드를 가지는데 2개 이상 가지는 프로세스를 Multi-threaded process라고 한다.

 

 

 

Apache MPM 방식

prefork MPM (다중 프로세스)

  • Client 요청에 대해 Apache 자식 프로세스를 생성하여 처리한다. 
  • Apache 설치 시 default로 설정되어 있다.
  • 하나의 자식 프로세스 당 하나의 스레드를 가지며, 자식 프로세스는 최대 1024개까지 가능하다.
  • 응답 프로세스를 미리 띄워놓고 클라이언트 요청 시 자식 프로세스가 반응하는 방식이다. 
  • 스레드 간 메모리 공유를 하지 않아 독립적 사용으로 안정적이나 메모리를 많이 사용한다. 
  • 일반적으로 Single CPU 또는 Dual CPU에서 성능이 더 좋다. 

worker MPM (멀티 프로세스-스레드)

  • 프로세스당 여러 개의 스레드 연결하는 방식
  • 스레드 간 메모리를 공유하여 메모리 사용량이 비교적 적다.
  • Prefork 보다 메모리 사용량이 적고, 동시 접속자가 많은 사이트에 적합하다. 
  • 프로세스 당 최대 64개의 스레드 처리가 가능하며, 각 스레드는 하나의 연결만을 부여받는다. 
  • 일반적으로 Multi CPU 시스템에서 성능이 좋다.

event MPM

  • 아파치 2.4.x 버전부터 Nginx가 사용하고 있는 Event Driven 방식을 지원하면서 생성된 방식
  • worker 방식을 기반으로 한다.
  • keep-alive 시에 클라이언트로부터 요청을 기다리고 있는 자식 프로세스 또는 자식 스레드 전체를 keep 하게 되는 문제를 해결하기 위하여 리스닝 소켓과 기타 모든 소켓을 처리하는 각 프로세스를 위한 전용 리스너 스레드를 사용한다. 
  • keep-alive의 문제점인 접속이 완전히 끝나지 않으면 스레드나 프로세스가 죽지 않는 치명적인 문제점 해결한 방식
  • 한 개 또는 고정된 프로세스만 생성하고 그 프로세스 내부에서 비동기 방식으로 효율적으로 작업 처리하여 속도가 가장 빠르다. 

 

 

대표적으로 사용되는 prefork와 worker 비교

MPM 설명 장단점
prefork - 프로세스 기반
- 요청 : 프로세스 = 1 : 1
- 실행중인 프로세스를 복제하여 실행 (메모리 영역까지 같이 복제)
- 응답 프로세스를 미리 띄워놓고 클라이언트 요청에 응답하는 방식
- 대량의 메모리가 필요하고 상대적으로 느리다.
- 구조가 간단하고 구현이 쉽다.
- 프로세스간 메모리를 공유하지 않아 안정적이다. 
- 일반적으로 single CPU 또는 Dual CPU 에서 성능이 좋다.
wokrer - 스레드 기반
- 요청 : 프로세스 = n : 1
- 요청을 스레드 단위로 처리 (최대 64개의 스레드 처리 가능)
- 한 개의 프로세스 내에 여러개의 스레드가 클라이언트의 요청을 처리하는 방식
- prefork 보다 메모리 사용량이 적다.
- 설정에 따라 약간 빠르다.
- 3개 이상의 멀티 CPU 에서 성능이 좋다. 
- 통신량이(=동시접속자 수가) 많은 서버에 적합하다. 

 

 

 

 

Apache MPM 확인 방법

Apache MPM은 Apache Httpd를 컴파일할 때 설정된다. 변경을 하려면 httpd.conf 에서 설정하는 것이 아니라 컴파일을 다시 해야 한다.

따라서 사전에 아파치 설치 시 반드시 --with-mpm=worker 옵션을 설정하고 설치해야 한다. 이 옵션을 주지 않을 경우, Linux에 한해 Default 값으로 Prefork 방식으로 설치된다. 

 

 

아래 아파치 버전 확인 명령어를 통해 Apache MPM을 확인할 수 있다. 

예시1

 

예시2

 

 

 

 

 

 

 

 

 

 

 

 

 

※참고

http://httpd.apache.org/docs/current/mpm.html

 

다중처리 모듈 (MPM) - Apache HTTP Server Version 2.4

다중처리 모듈 (MPM) 이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요. 이 문서는 다중처리 모듈 (Multi-Processing Module)이 무엇이며, 아파치 웹서버가 이를 어떻게

httpd.apache.org

 

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kkson50&logNo=221099080215 

 

[쉬운설명] Apache MPM - Multiple Request Processing Module

Apache MPM 이란?MPM은 Multiple Request Processing Module의 약자인데 우리말로 번역하면 "다...

blog.naver.com

 

https://s-jg.tistory.com/27

 

Apache MPM(Multi Processing Module) 이란?

MPM은 Multi Processing Module 약자로 다중 처리 모듈 이다. 클라이언트로 부터 받은 요청을 어떤 방식으로 처리 할 것이냐를 결정 하는 모듈로 Prefork, Worker, 그리고 아파치 2.4 부터 사용 가능한 event 방.

s-jg.tistory.com

https://bkjeon1614.tistory.com/23

 

아파치 서버 MPM, worker, prefork 방식

1. 아파치 서버 MPM( Apache Multi-Processing Modules ) - 아파치 서버가 클라이언트에게서 받아들인 요청을 처리하기 위하여 자식 프로세스들에게 분배하는 모듈 - prefork 방식과 worker 방식이 있다 2. pref..

bkjeon1614.tistory.com

 

320x100
반응형

'Devlog > Apache' 카테고리의 다른 글

Apache Server Status를 이용한 Apache 모니터링  (0) 2021.08.31