Linux

apache 튜닝 Prefork Worker Event

Naan 2020. 12. 14. 15:09
320x100

Prefork MPM

하나의 쓰레드를 가진 다수의 자식 프로세스를 사용.각각의 프로세스는 하나의 커넥션을 담당한다.

실행중인 프로세스를 복사하여 자식 프로세스를 만드는데 이때 메모리까지 복사하여 많은 메모리를 사용한다.

CPU 가 1~2개일때 성능이 좋다.

Worker MPM

다수의 쓰레드를 지닌 다수의 자식 프로세스를 사용. 각각의 쓰레드가 하나의 커넥션을 핸들링한다.

쓰레드간 메모리를 공유한다. 멀티 CPU 일때 성능이 좋다.

Event MPM

2.4 버전부터 새로 생긴 모드.

Nginx 처럼 Event driven 방식으로 성능이 뛰어나다.

default 는 prefork 다. 자신의 mpm 확인 방법은

httpd -V

Server version: Apache/2.4.6 (CentOS)
Server built: Nov 5 2018 01:47:09
Server's Module Magic Number: 20120211:24
Server loaded: APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

하거나

httpd -V | grep MPM

Server MPM: prefork

하면 확인 가능하다.

자 변경을 해보자
변경방법은 (아파치 2.4.x 기준)

# vi /etc/httpd.conf.modules.d/00-mpm.conf

Select the MPM module which should be used by uncommenting exactly

one of the following LoadModule lines:

prefork MPM: Implements a non-threaded, pre-forking web server

See: http://httpd.apache.org/docs/2.4/mod/prefork.html

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

worker MPM: Multi-Processing Module implementing a hybrid

multi-threaded multi-process web server

See: http://httpd.apache.org/docs/2.4/mod/worker.html

#LoadModule mpm_worker_module modules/mod_mpm_worker.so

event MPM: A variant of the worker MPM with the goal of consuming

threads only for connections with active processing

See: http://httpd.apache.org/docs/2.4/mod/event.html

#LoadModule mpm_event_module modules/mod_mpm_event.so

위에 가서 주석처리를 변경 해주고 서비스를 재시작 해주면 된다.

service httpd restart

httpd -V

Server version: Apache/2.4.6 (CentOS)
Server built: Nov 5 2018 01:47:09
Server's Module Magic Number: 20120211:24
Server loaded: APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture: 64-bit
Server MPM: worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

320x100