상세 컨텐츠

본문 제목

[Apache] 자식 프로세스 생성 이유

System/Solution

by 귤똥 2018. 6. 26. 02:16

본문

 

Apache를 실행 후 프로세스 정보를 확인하면 여러 개의 프로세스가 나타나는 걸 확인할 수 있다.

 

Apache 프로세스를 확인하기 위해 다음과 같이 입력한다

 

 

ps -ef | grep httpd

 

 

 

 

 

위의 사진을 확인하면 Apache 프로세스가 여러 개 나타나는 걸 확인할 수 있다.

 

프로세스 목록을 확인하면 공통되는 부분을 확인할 수 있다.

 

PPID 즉 부모 프로세스 번호가 init 프로세스를 제외하고 Apache의 PID로 구성되어 있다.

 

 

 

왜 그러면 아파치 부모 프로세스에서 자식 프로세스가 파생되는지 확인을 해 보자.

 

Apache에서는 요청을 처리하기 위해 MPM(Multi-Processing Module) 방식을 사용한다.

 

MPM이 무엇인가 하면 다음과 같다.

 

 

Apache가 Client의 요청을 처리하기 위해 Child Process에게 분배하는 방식

 

 

다음으로는 Apache의 MPM의 종류에 대해서 알아보자

 

MPM의 종류는 크게 2가지가 있다

 

 

1. Prefork 방식

 

2. Worker 방식

 

두 가지 종류에 대해서 간단하게 설명을 하면 다음과 같다.

 

 

 

 

먼저 Prefork 방식에 대해서 설명을 하겠다.

 

Prefork MPM 방식은 Client가 Apache에게 요청을 하게 되면 Parent Process는 Child Process에게 분배하는 방식이다.

 

Child Process마다 Thread가 1개씩 존재하면서 Child Process마다 독립적인 메모리 공간을 소유하며

 

Parent Process와 Child Process는 메모리를 서로 공유를 한다.

 

Child Process가 독립적인 메모리 공간을 소유하기 때문에 메모리 사용량이 높다.

 

 

간단하게 Prefork 방식을 그림으로 표현하면 다음과 같다.

 

 

 

 

 

 

다음은 Worker 방식에 대해서 설명을 하겠다.

 

Worker MPM 방식은 Apache에게 요청을 하게 되면 Parent Process는 Child Process에게 분배 후 Multi-Threads에게 전달하는 방식이다.

 

Child Process 당 Thread가 n 개씩 존재하며 Multi-Threads 간에 메모리를 공유하며 하나의 요청을 하나의 Thread가 처리하는 방식이다.

 

하나의 요청을 Child Process의 한 개의 Thread가 처리하기 때문에 메모리 사용량이 낮다.

 

 

간단하게 Worker 방식을 그림으로 표현하면 다음과 같다.

 

 

 

 

 

간단하게 Apache의 MPM에서 알아봤으니 실제 설정이 어떻게 되어 있는지 확인해 보자.

 

 

현재 어떤 방식의 MPM이 적용되어 있는지 확인하기 위해서 다음과 같은 명령어를 입력한다

 

httpd -V  | grep "Server MPM"

 

Shell에서 httpd 명령어를 사용할 수 없다고 나오면 httpd 파일이 있는 디렉터리에 가서 실행을 한다.

 

명령어를 입력하여 확인하면 다음과 같이 MPM 정보가 나타난다.

 

 

Apache 설치 후 바로 확인을 해보니 Prefork 방식인 것을 확인할 수 있다.

 

아마 Prefork 방식이 Default로 지정이 되어 있는 것 같다.

 

 

다음으로는  MPM 설정 정보가 있는 파일을 확인해 보자

 

설치된 경로에 따라 위치가 다를 수 있지만 yum으로 설치한 경우에는 다음 경로로 들어가 확인하면 된다.

 

more /etc/httpd/conf/httpd.conf

 

명령어를 입력하면 여러 설정 정보를 확인할 수 있는데 하단으로 내려가면 MPM 관련된 설정이 보인다.

 

 

 

Perfork의 StratServers 설정값에 대해서 확인을 해보자

 

StartServers 이란 Apache 실행 시 생성되는 자식 프로세스 개수로 현재 8개 지정되어 있다.

 

그럼 다시 Apache 자식 프로세스 개수를 확인해 보자

 

 

개수를 확인해 보면 8개인 것을 확인할 수 있다.

 

Apache의 자식 프로세스 개수 MinSpareServers와 MaxSpareServers 설정에 따라 유동적으로 변동될 수 있다.

 

그 외 Worker MPM 및 나머지 설정들은 눈으로 보면 바로 무엇인 줄 알 수 있기 때문에 따로 설명은 하지 않겠다.