[Linux] Apache MPM 설정

handa·2023년 2월 9일
0
post-thumbnail

1. MPM(Multi-Processing Module)

apache가 받아들인 요청을 처리 하기 위해 'child processes'에게 분배하는 방식을 말한다.
확장성이 필요한 사이트는 worker방식을 택하고, 안정성과 오래된 소프트웨어와 호환성이 필요한 사이트는 prefork를 보편적으로 사용한다. (Linux 기본 설정 prefork)

2. prefork

  • 자식 프로세스를 미리 준비해두는 방식 (최대 1024개)
  • 하나의 자식 프로세스당 1개의 스레드 연결
  • 스레드간 메모리 공유를 하지 않아 독립적사용으로 안정적이나 메모리를 많이 사용

3. worker

  • 자식 프로세스들이 각각 여러 쓰레드를 사용하며, 각 쓰레드는 한번에 한 연결을 담당
  • 요청을 쓰레드 단위로 처리 (최대 64개의 쓰레드 처리 가능)
  • 쓰레드간에 메모리를 서로 공유함으로써 기본 사용 메모리가 낮음
  • 동시접속자가 많은 사이트에 적합

4. Prefork 와 Worker 방식의 차이점

  • Worker가 Prefork에 비해 적은 메모리 사용한다.
  • Worker : 통신량이 많은 서버에 적절한 형태를 가진다.
  • Prefork : 안전하지 않은 제 3자가 만든 모듈을 사용할 수 있다.
  • Prefork : 디버깅이 빈약한 플랫폼에서 쉽게 디버깅 할 수 있다.
  • Worker 와 Prefork의 속도는 비슷하다.

5. event

  • 아파치 2.4.x 버전부터 생성된 방식
  • Worker 방식을 기반으로 함
  • Keep Alive한 아파치 요청을 그댇로 맺는 것이 아니라, 요청을 처리하는 쓰레드를 따로 두도록 하여 분산된 처리를 할 수 있게 하는데 목적

6. 설정

vi /etc/httpd/conf.modules.d

6-1. Prefork 방식

...

<IfModule mpm_prefork_module>
	StartServer 5
    MinSpareServers 5
    MaxSpareServers 10
    MaxClients 150
    MaxConnectionsPerChild 0
</Ifmodule>

...

StartServers - 아파치 시작시 생성되는 기본 프로세스 개수
MinSpareServers - 최소 프로세스의 개수
MaxSpareServers - 최대 프로세스의 개수
MaxClients - 아파치 시작시 최대로 실행할 자식프로세스의 개수
M

6-2. Worker 방식

...

<IfModule mpm_worker_module>
	StartServers 3
    MinSpareThreads 25
    MaxSpareThreads 75
    ThreadsPerChild 25
    MaxRequestWorkers 400
    MaxConnectionsPerChild 0
</IfModule>

...

StartServer - 아파치 시작시 생성되는 기본 프로세스 개수
ServerLimit(default : 16) - 최대 실행가능한 프로세스 개수
MinSpareThreads - 최소로 유지할 쓰레드 개수
MaxSpareThreads - 최대로 유지할 쓰레드 개수
ThreadsPerChild - 하나의 자식프로세스가 가질 수 있는 쓰레드 개수
MaxRequestWorkers(ServerLimit * ThreadsPerChild) - 동시에 처리될 최대 커넥션(request)의 수
MaxRequestsPerChild - 자식프로세스가 살아있는동안 요청을 받을 개수
MaxConnectionsPerChild - 서버 프로세스가 종료되기 전에 제공되는 최대 연결 수 ( 0의 경우 제한 없음 )

나는 worker 방식으로 하였다. MaxRequestWorkers를 잘 계산하는 것이 중요하다. 제대로 값을 맞추지 못하면 에러 발생가 발생하여 초기 설정으로 돌아온다.
prefork 방식은 계산방법이 인터넷에 잘 나와있으나 worker 방식은 설정을 계속 바꿔보면서 최적화를 맞출수 밖에 없다고 한다.
cpu, memory, apache 프로세스가 사용하는 memory 등을 고려해서 최적화를 맞추자.

profile
진짜 해보자

0개의 댓글