태그 Archives: mpm_worker

apache 2.4.27 버전 이상에서 Segmentation fault 오류가 발생.

apache 2.4.26 이하 버전에서 Important 취약점인 CVE-2017-9788, CVE-2017-9789 가 존재 하기 때문에

apache 버전을 최신화 한뒤에 apache error_log 에서 간헐적인 접속 끊김 증상이 확인이 되었다.

Segmentation fault, memory corrupted – core dump 에 의한 apache child 프로세스의 강제 exit 가 된다.

 

이와 같은 경우 메인 프로세스는 살아 있는 상태에서 child 가 죽는 현상이다 보니 실제 apache 는 설정에 따라

부족한 child 프로세스를 다시 생성하기 때문에 발생하고 있지만 모르고 있을 수 있다. – apache – error_log 를 꼭 점검해봐야 한다.

 

내용 추적이 되지 않아 한동안 고생을 하다가 이 에러가 특정한 상황에서만 발생하는것을 확인하였다.

조건1. https 프로토콜 사용

조건2. http/2 사용

조건3. mpm_worker 혹은 mpm_event 사용 (event 에서 더 심하게 발생함.)

조건4. mod_php 사용

 

기존에 apache 2.4.27 부터 worker 가 기본 mpm 이 되었고,

어떤 버전인지 부터는 모르지만 최신 버전의 2.4.38 버전은 event mpm 이 기본값으로 설정이 된다.

이를 prefork 방식으로 변경해서 운영을 해도 되지만 이럴 경우 http/2 는 지원이 되지 않는다.

 

기본이 event mpm 일 경우 권장 되는 운영 환경은 apache 2.4 –  fcgi_proxy – php-fpm 구조이다.

다만 php-fpm 의 경우 tomcat 처럼 별도의 WAS 환경이기 때문에 익숙치 않고 설정법을 새롭게 배워야 하는 단점이 존재 한다.

 

변경을 하는것은 맞는 방향이겠지만 이는 충분한 시간이 주어져야 한다는 단점이 존재한다.

하지만 서버는 당장에 문제가 발생하고 있기 때문에..

 

때문에 임시 방편으로 아래와 같은 설정(H2MaxWorkers)을 추가 하여 오류를 방지 하고 시간을 벌도록 한다. ‘ㅅ’a

H2MaxWorkers 설정을 1로 할경우 mpm_worker 의 경우 속도 저하가 체감이 될정도 이기 때문에 mpm_event 로 운영을 하도록 한다.

 

mpm 설정은 ……./httpd/conf.modules.d/00-mpm.conf 에 존재 한다.

 

현재 apache 의 mpm 은 아래 명령어로 확인할 수 있다.