2016년 11월 30일 수요일

Apache 2.4 MPM(prefork, worker, event)



  1. MPM(Multi-processing Module): Apache가 받아 들인 요청을 처리하기 위해 'child processes'에게 분배하는 방식
    -확장성이 필요한 사이트는 worker방식을 택하고, 안정성과 소프트웨어와 호환성이 필요한 사이트는 Prefork를 보편적으로 사용
    -Linux의 경우, Prefork 방식이 기본 설정이며, Worker방식을 사용하기 위해서는 설치시에 -with-mpm=worker옵션을 사용하여 설치
  2. Prefork
    1)실행중인 프로세스를 복제하여 실행(메모리 영역까지 같이 복제)
    2)프로세스가 소비하는 메모리가 많음
    3)응답프로세스를 미리 띄워놓고 클라이언트 요청 시 자식 프로세스가 반응하게 되는 방식
    4)안전하지 않은 제 3자가 만든 모듈 사용 가능
    5)디버깅이 빈약한 플랫폼에서 쉬운 디버깅 가능
    6)일반적으로 single CPU 또는 Dual CPU에서 성능이 좋음
  3. Worker
    1)자식 프로세스들이 각각 여러 스레드를 사용하여, 각 스레드는 한번에 한 연결을 담당
    2)Worker 방식은 일반적으로 멀티 CPU 시스템에서 성능이 좋다.
    3)요청을 스레드 단위로 처리 (최대 64개의 스레드 처리가능)
    4)지정된 만큼의 프로세스와 각 스레드를 준비하여 클라이언트의 요청을 받아들이는 설정
    5)기본 사용 메모리는 prefork보다 낮으면 스레드간에 메모리를 서로 공유함
    6)동시접속자가 많은 사이트에 적합
  4. Prefork와 Worker 방식의 차이점
    1)Worker가 Prefork에 비해 적은 메모리를 사용한다.
    2)Worker: 통신량이 많은 서버에 적절한 형태를 가진다.
    3)Prefork: 안전하지 않은 제 3자가 만든 모듈을 사용할 수 있다.
    4)Prefork: 디버깅이 빈약한 플랫폼에서 쉽게 디버깅 할 수 있다.
    5)'Worker'와 'Prefork'의 속도는 비슷하다.
  5. Event
    -요청과 Keep Alive한 아파치 요청을 그대로 맺는 것이 아니라, 요청을 처리하는 스레드를 따로 두도록 하여 분산된 처리를 할 수 있게 하는 목적을 둠 2.4.x 버전부터 설정이 추가되었음

  1. 설정
    1)httpd.conf 수정
      -vi httpd.conf
      -"include conf/extra/httpdmpm.conf" 설정의 주석을 제거
    2)Prefork 방식
      -한개의 자식 프로세스는 한 개의 연결을 담당한다.
      -프로세스가 생성되는 구조이므로 당연히 worker보다 많은 메모리를 사용한다.
      -프로세스간 메모리를 직접 공유하지 않으므로, 메모리 공간이 독립적이어서 안정적이다.
      -conf/extra/httpd-mpm.conf 파일 수정
        <ifModule mpm_prefork_module>
            StartServers    5
            MinSpareServers    5
            MaxSpareServers    10
            MaxRequestWorkers  250
            MaxConnectionsPerChild  0
        </ifModule >
      <옵션 설명>
       -StartServer: 시작시에 생성되는 서버 프로세스의 개수
       -MinSpareServers, MaxSpareServers: 부하가 적어서 MinSpareServers 개수 보다 적었을 경우 최소한 이 개수 만큼 아파치가 유지하려 하며, 부하가 증가하여 프로세스 개수가 많아질 경우에 MaxSpareServers개수 이하로 줄이려고 아파치가 구동
       -MaxConnectionsPerChild: 클라이언트들의 연결을 제한.(만약 자식 프로세스가 값만큼 요청을 받았을때 자식 프로세스는 자동으로 kill, 0인경우 무한대)
    3)Worker 방식
      -자식 프로세스들이 여러개의 스레드를 갖을 수 있으며, 각 스레드는 한번에 한 연결을 담당
      -Prefork보다 메모리 사용량이 적으며, 통신량이 많은 서버에 적절
      -스레드 간에 메모리 공간을 공유하며, 리소스 경합이 발생하지 않도록 주의 필요.
      -conf/extra/httpdmpm.conf 파일 수정  
        <ifModule mpm_worker_module>
            StartServers    5
            MinSpareThreads  75
            MaxSpareThreads  250
            ThreadsPerChild  25
            MaxRequestWorkers  400
            MaxConnectionsPerChild  0
        </ifModule >
    <옵션 설명>
       -StartServer: 시작시에 생성되는 서버 프로세스의 개수
       -MinSpareThread: 최소 thread 수
       -MaxSpareThreads: 최대 thread 수
       -ThreadPerChild: 자식 프로세스별 지속적으로 가질 수 있는 thread의 수
       -MaxRequestWorkers: 자식 스레드의 최대 수
       -MaxConnectionsPerChild: 자식 프로세스가 서비스할 수 있는 최대 요청 개수

댓글 없음:

댓글 쓰기