그놈의 안드로이드

Apache Prefork, Worker, Event 본문

리눅스/웹 서버

Apache Prefork, Worker, Event

Sandai.Developer 2019. 1. 1. 21:06

Prefork


아파치의 대부분의 기능은 모듈에서 나옵니다. 

심지어이 MPM Prefork도 모듈로 제공되며 활성화 또는 비활성화 할 수 있습니다. 

이 prefork apache 모델은 non-threaded이며 좋은 모델입니다. 

각각의 연결이 서로 격리되어 있기 때문입니다.

따라서 한 연결에 문제가 발생하면 다른 연결이 모두 영향을 미치지 않습니다.

 기본적으로 MPM 모듈을 지정하지 않으면 apache는이 MPM Prefork를 MPM 모듈로 사용합니다. 

그러나이 모델은 자원 집약적입니다.


프리 포크 모델은 왜 자원 집중적 인 것인가?

이 모델에서는 단일 상위 프로세스가 앉아서 요청을 기다리고 요청이 도착할 때 역할을하는 많은 하위 프로세스를 작성합니다. 

즉, 모든 요청은 별도의 프로세스에 의해 처리됩니다.

 즉, 우리는 " 요청 당 처리 "라고 말할 수 있습니다 

그리고 아파치는 요청이 도착하기 전에 여러 가지 유휴 프로세스를 유지 관리합니다.

이러한 유휴 프로세스가 요청을 기다리고 있기 때문에 요청이 도착하면 빠르게 처리 할 수 ​​있습니다.

리눅스에서 프로세스를 배우고 이해하는 데 관심이 있다면. 그런 다음 아래 게시물을 통해 이동하십시오.

읽기 : Linux의 프로세스 모니터링 및 관리

그러나 모든 프로세스는 RAM 및 CPU와 같은 시스템 리소스를 활용합니다. 그리고 RAM의 동등한 양은 모든 프로세스마다 활용됩니다.

한 번에 많은 요청을받는다면 아파치에 의해 생성 된 많은 수의 자식 프로세스를 가지게 될 것이고 각 프로세스는 일정량의 시스템 메모리와 CPU 리소스를 활용할 것이기 때문에 리소스 사용량이 많아 질 것입니다.



Worker

이 apache 모델은 제한된 수의 프로세스가 많은 수의 요청을 처리하기 때문에 prefork 모델보다 적은 시스템 리소스로 많은 요청을 처리 할 수 ​​있습니다.

이것은 아파치의 멀티 스레드 아키텍처입니다. 

이 모델은 프로세스보다는 스레드를 사용하여 요청을 처리합니다. 

이제 스레드 란 무엇입니까 ??

운영 체제의 스레드는 작업을 수행하고 종료하는 프로세스의 작은 인스턴스입니다. 스레드는 프로세스 내부의 프로세스라고도합니다.

이 모델에는 또한 하나의 부모 프로세스가있어 일부 자식 프로세스가 생성됩니다. 그러나 " 요청 당 프로세스 "는 없지만 대신 " 요청 당 스레드 "가 있습니다. 따라서 자식 프로세스는 내부에 일정한 수의 스레드를 갖게됩니다. 각 하위 프로세스에는 특정 " 서버 스레드 "와 특정 " 유휴 스레드 "가 있습니다. 유휴 스레드는 새 요청을 기다리고 있으므로 요청이 도착하면 스레드를 만드는 데 시간이 낭비되지 않습니다.

아파치 설정 파일 /etc/httpd/conf/httpd.conf에는 " StartServers " 라는 아파치가 시작될 때 얼마나 많은 자식 프로세스가있을 것인지 지시하는 지시어 가있다.

자식 프로세스는 구성 파일의 ThreadsPerChild " 인수에 의해 지정된 고정 된 수의 스레드를 사용하여 요청을 처리합니다 .

참고 : 아파치 MPM 작업자 모델로 작업하는 동안보고 된 PHP 모듈 문제가 있습니다.




Event


자, 이제 몇 가지 운영상의 정의를 갖춘 때문에,이 기사에서 다루는 근본적인 문제에 대처합시다. 


서버에서 하나 이상의 사용중인 Web 사이트를 실행하는 경우 해당 사이트에 서비스를 제공하는 데 필요한 처리 능력과 메모리의 양을 줄이는 것이 바람직합니다. 


그럼으로써 결과적으로 사이트를보다 효율적으로 신속하게 그리고 더 많은 동시 클라이언트에 제공 할 수 있습니다.


 따라서 가장 좋은 방법 중 하나는 Apache 2.4에서 Prefork MPM에서 새로운 Event MPM로 전환하는 것입니다. 


그러나 거기에는 mod_php를 제거하고 mod_proxy_fcgi을 통해 프록시 된 PHP-FPM 백엔드로 전환해야합니다. 


과거에는 몇 가지 문제가 있었다는 것을 제외하고 (모든 문제가 해결되었습니다 (.htaccess 파일이 존중되지 않고 처리 된 PHP 파일을 효과적으로 Apache에 전달되어 전체 시스템이 가상 호스트에서 동작하는 등).). 


나중에 이러한 문제를 해결하는 방법을 소개하고 있지만, 사전에 이러한 두 가지 MPM과 각각의 PHP 프로세스에 연결 개요를 나타내는 다이어그램을 일부 참조하는 것이 좋습니다.


PHP와 Apache를 사용하는 사실상의 방법은 mod_php를 통해 임베디드 PHP 프로세서를 사용하는 것입니다.

mod_php가 내장 된 Apache Prefork MPM
Prefork MPM과 임베디드 mod_php를 가진 아파치 
Click to enlarge

 

이 새로운 방법은 PHP 처리를 PHP-FPM으로 프록시 처리하는 것입니다.

mod_proxy_fcgi를 통한 Apache 이벤트 MPM에서 PHP-FPM으로
PHP-FPM을 통해 mod_proxy_fcgi에 이벤트 MPM 오프로드와 아파치 


'리눅스 > 웹 서버' 카테고리의 다른 글

WAS (Web Application Server) 란?  (0) 2019.01.01
Nginx 아키텍처  (0) 2019.01.01
Lighttpd error code 500  (0) 2018.12.31
Tornado 웹서버 구성  (0) 2018.12.30
Vert.x 웹서버 구성  (0) 2018.12.30
Comments