Apache HTTP Server

Apache MPM event란?

sstdio.h·2018년 1월 18일·조회 7,082

1. 개요

Apache HTTP Server의 event 방식 MPM(Multi-Processing Module)에 대한 내용이다. event MPM은 worker MPM을 기반으로 하면서, KeepAlive 연결처럼 요청을 기다리는 동안 스레드가 오래 점유되는 상황을 줄이기 위해 설계된 방식이다.


2. worker 방식과의 관계

event 방식은 사실 worker 방식에 기반하고 있다. 따라서 기본적인 MPM 설정 역시 worker 방식과 유사하다. 다만 AsyncRequestWorkerFactor와 같이 event MPM에서 비동기 연결 처리를 제어하기 위한 파라미터가 추가되었다.


3. AsyncRequestWorkerFactor

  • 프로세스당 동시 connection 제한에 영향을 주는 파라미터이다. 기본값은 2다.
  • 하나의 프로세스는 현재 connection 수가 ThreadsPerChild + (AsyncRequestWorkerFactor * number of idle workers)보다 작을 때만 새로운 connection을 받아들인다.

즉, 유휴 worker가 많을수록 더 많은 비동기 connection을 받아들일 수 있고, 유휴 worker가 줄어들면 새 connection을 받는 범위도 함께 줄어든다. 이 값은 단순히 크게 잡는다고 좋은 설정은 아니며, KeepAlive 사용량과 실제 worker 여유분을 함께 보고 조정해야 한다.


4. 메커니즘

4-1. 기존 방식의 문제점

KeepAlive 사용 시 클라이언트의 다음 요청을 기다리는 동안 차일드 프로세스 또는 차일드 스레드가 connection을 계속 유지하게 된다. 이 경우 실제로 요청을 처리하고 있지 않아도 worker가 점유되어, 동시 접속이 많아질 때 처리 가능한 요청 수가 줄어들 수 있다.

4-2. 해결책

event 방식은 4-1의 문제를 줄이기 위해 각 프로세스에 리스닝 소켓과 기타 소켓 상태를 처리하는 전용 listener 스레드를 둔다. 요청 처리가 끝난 KeepAlive connection을 worker 스레드가 계속 붙잡고 있는 대신, listener 스레드가 해당 connection의 상태를 감시하다가 새 요청이 들어오면 다시 worker 스레드에 넘기는 방식이다.

이 구조 덕분에 KeepAlive connection이 많은 환경에서 worker 스레드를 더 효율적으로 사용할 수 있다. 다만 실제 효과는 트래픽 특성, KeepAlive 설정, 모듈 구성에 따라 달라질 수 있으므로 운영 환경에서는 mod_status 등을 통해 상태를 확인하면서 조정하는 것이 좋다.


5. mod_status

event MPM에서는 Async Connection을 위한 다음과 같은 status가 추가되었다.

  • Writing
  • Keep-alive
  • Closing

mod_status를 활성화해 서버 상태 페이지를 확인하면, worker가 실제 요청을 처리 중인지 또는 비동기 connection이 KeepAlive 상태로 대기 중인지 파악하는 데 도움이 된다. event MPM의 효과를 확인할 때는 단순히 전체 접속 수만 보지 말고, idle worker 수와 async connection 상태를 함께 보는 것이 좋다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.