나는 아파치가 제공하는 다른 MPM- ‘worker’, ‘event’, ‘prefork’등에 약간 혼란 스럽습니다.
이들 간의 주요 차이점은 무엇이며 특정 배포에 가장 적합한 것을 어떻게 결정할 수 있습니까?
답변
이 다수있는 MPM 모듈 (다중 처리 모듈)하지만, 지금까지 가장 널리 (적어도 * nix에서 스크립트 플랫폼에서) 사용되는 세 가지 주요 것들이다 : prefork
, worker
,와 event
. 본질적으로 이들은 Apache 웹 서버의 발전과 오랜 시간 (소프트웨어 용어로) 이력에 대한 컴퓨팅 제약 내에서 HTTP 요청을 처리하기 위해 서버가 구축 된 다양한 방법을 나타냅니다.
prefork
mpm_prefork
그것은 .. 잘 .. 그것은 모든 것과 호환됩니다. 요청을 처리하기위한 많은 하위 프로세스를 분리하고 하위 프로세스는 한 번에 하나의 요청 만 처리합니다. 서버 프로세스가 거기에 있고 조치를 취할 준비가되어 있으며 스레드 마샬링을 처리 할 필요가 없으므로 한 번에 단일 요청 만 처리 할 때 실제로 최신 스레드 MPM보다 빠르지 만 동시 요청이 발생합니다. 서버 프로세스가 해제 될 때까지 줄을 서서 기다리기 때문입니다. 또한 프리 포크 자식 프로세스 수를 늘리려 고하면 심각한 RAM을 쉽게 줄일 수 있습니다.
스레드 안전하지 않은 모듈이 필요하지 않은 경우 프리 포크를 사용하지 않는 것이 좋습니다.
다음과 같은 경우에 사용하십시오 : 같은 쓰레드가 사용될 때 깨지는 모듈이 필요합니다 mod_php
. 그래도 FastCGI 및을 사용해보십시오 php-fpm
.
다음과 같은 경우 사용하지 마십시오 : 모듈이 스레드되지 않습니다.
worker
mpm_worker
스레딩을 사용합니다. 동시성에 큰 도움이됩니다. 작업자는 일부 하위 프로세스를 분리하여 하위 스레드를 분리합니다. 프리 포크와 유사하게 일부 연결 스레드는 가능한 경우 들어오는 연결을 처리하기 위해 준비 상태로 유지됩니다. 스레드 수는 프리 포크에서 서버 수와 같이 메모리 사용에 직접적인 영향을 미치지 않기 때문에이 방법은 RAM에 훨씬 더 친절합니다. 또한 연결은 프리 포크의 예비 서버 대신 사용 가능한 스레드 (일반적으로 사용 가능)를 기다려야하기 때문에 동시성을 훨씬 더 쉽게 처리합니다.
사용하는 경우 : Apache 2.2 또는 2.4를 사용하고 있고 주로 SSL을 실행하고 있습니다.
다음과 같은 경우 사용하지 마십시오 : 호환성을 위해 프리 포크가 필요하지 않으면 실제로 잘못 될 수 없습니다.
그러나 트레드는 요청이 아닌 연결에 연결됩니다. 즉, 연결 유지 연결은 스레드가 닫힐 때까지 (구성에 따라 시간이 오래 걸릴 수 있음) 항상 스레드를 유지합니다. 그래서 우리는 ..
event
mpm_event
구조적으로 작업자와 매우 유사합니다. Apache 2.4에서는 ‘실험적’상태에서 ‘안정한’상태로 변경되었습니다. 가장 큰 차이점은 전용 스레드를 사용하여 연결 유지 연결을 처리하고 요청이 실제로 작성된 경우에만 요청을 하위 스레드로 처리한다는 것입니다 (요청이 완료된 후 즉시 해당 스레드를 해제 할 수 있음). 이것은 한 번에 모두 활성화되어 있지는 않지만 가끔 요청을하는 경우와 클라이언트에 연결 유지 시간이 오래 걸리는 클라이언트의 동시성에 유용합니다.
SSL 연결은 예외입니다. 이 경우 작업자와 동일하게 작동합니다 (연결이 닫힐 때까지 지정된 연결을 지정된 스레드에 붙이기).
사용하는 경우 : Apache 2.4 및 스레드와 비슷하지만 유휴 연결을 기다리는 스레드가 마음에 들지 않습니다. 누구나 스레드를 좋아합니다!
다음과 같은 경우 사용하지 마십시오 : Apache 2.4가 아니거나 호환성을 위해 프리 포크가 필요합니다.
서버에 6 개의 TCP 연결 (물론 연결 유지)을 다중화 하려는 오늘날의 slowloris , AJAX 및 브라우저에서 동시성은 서버 확장 및 확장에 중요한 요소입니다. 아파치의 역사는 이와 관련하여 묶여 있으며, 리소스 사용이나 규모면에서 nginx 또는 lighttpd와 유사하지는 않지만 개발 팀은 여전히 관련성이 높은 웹 서버를 구축하기 위해 노력하고 있음이 분명합니다 오늘날의 높은 요청 동시성 세계에서.
답변
다음은 gif와 함께 작동하는 방법에 대한 좋은 설명입니다.
https://www.datadoghq.com/blog/monitoring-apache-web-server-performance/
간단히 말해서 2.4 이상 이고 리버스 프록시 (디스패처) 로 httpd가 필요한 경우 선택은 Event MPM입니다.
답변
2018 년 2 월 현재, Event MPM에 대한 Apache 2.4 문서에는 Apache를 프록시로 사용하면 2.4.24 이후의 “개선 된 연결 처리”가 설계된대로 작동하지 않게됩니다. 제한 사항 섹션을 참조하십시오 .
문제는 프록시로서 작업자가 응답의 끝을 알 수 없으며 리스너에게 제어를 반환하기 전에 전체 응답이 표시 될 때까지 기다려야한다는 것입니다.
따라서 아파치를 프록시로 사용하는 경우 작업자 모델을 사용하는 것이 가장 좋습니다. 프록시 환경에서 이벤트 모델에 이점이 있는지는 확실하지 않지만 아마도있을 수 있습니다.
답변
주로 사용하려는 Apache 모듈에 따라 다릅니다. 나는 일반적으로 worker가 기본 선택이라고 생각하지만 일부 (이전) 모듈은 포크가 필요하며 프리 포크에 의존합니다.
환경 설정이 없으면 OS 배포에서 선호하는 종속성을 사용하는 것이 좋습니다. 예를 들어 우분투는 Apache2를 설치할 때 기본적으로 mpm-worker를 설치합니다.