아파치 서버에서 MPM(Multi-Processing Moudules)이란
- 클라이언트에서 받아들인 요청을 처리하기 위해서 자식 프로세스들에게 분배하는 모듈이다.
아파치가 2.4.x 버전 이전에는 prefork 와 worker MPM방식이 존재했는데 특징은 다음과 같다.
prefork (다중 프로세스 처리)
– 하나의 자식 프로세스가 하나의 스레드를 갖는 구조, 자식프로세스는 최대 1024개 까지 가능.
– 스레드간 메모리 공유 안 함(안정적이나 메모리 사용량이 큼)
– 실행중인 프로세스를 복제하여 실행(메모리 포함)
– 응답 프로세스를 미리 띄워놓고 클라이언트 요청 시 프로세스가 반응하게 되는 형식
– 1 코어 or Dual 코어에서 성능이 좋다.
worker(멀티 프로세스 — 스레드 방식)
– prefork보다 메모리 사용량이 적다.
– 통신량이 많은 서버에 적절하다(=동시접속자 수)
– 프로세스당 스레드가 여러개 이며 최대 64개의 스레드 처리가 가능하다.
– 스레드간에 메모리를 공유한다.
– 멀티 CPU 시스템에 적절하다.
이렇게 두가지 방식만 존재하였던 과거와는 달리 현재에는 Event Driven 방식도 같이 지원한다.
Event Driven 방식은 Nginx로 유명한데 한개 또는 고정된 프로세스만 생성하고 그 프로세스의 내부에서 비 동기 방식으로 효율적으로 작업을 처리한다. (속도가 가장 빠르다)
그래서 나는 Nginx에서 Apache로 왔기때문에 Event Driven 방식을 적용해 보겠다. 지금 apache에 적용되어있는 정보를 먼저 확인해보자.
이제 사용가능한 MPM을 확인해보자
ll /etc/apache2/mods-available/mpm*
각 모듈에 대한 설정값이 궁금하면 위에서 보이는 conf 값으로 확인이 가능하다.
이제 prefork 모듈에서 event 모듈로 변경해보겠다.
먼저 사용중인 prefork를 사용안함으로 설정한다
a2dismod mpm_prefrok
찾아보니 아파치에서 mpm_event를 적용하기 위해서는 php가 아닌 php-fpm을 설치해야 한다고한다 그래서 php 삭제부터 다시 ㄱㄱ..
apt-get remove libapache2-mod-php7.2
이제 php7.2 와 prefork를 중지하고 event와 fcgi를 활성화 시켜줍니다.
그리고 php7.2를 대신할 php7.2-fpm을 설치합니다.
이제 PHP-FPM을 사용해서 PHP파일을 처리하도록 사용하는 VirtualHost 구성을 편집해야합니다.
vi /etc/apache2/sites-available/dalso.iptime.org.conf
맨위에
ProxyPassMatch ^/(.
.php(/.
)?)$ unix:/run/php/php7.2-fpm.sock|fcgi://localhost/var/www/html/
줄을 추가시킵니다. 그리고 service apache2 restart로 재 시작
다시 apachectl -V로 확인해봅니다.
대세는 이미 Event-Driven 방식이다. 후딱 넘어가자