아파치 v2.4에서 기존에 지원하던 prefork, worker 방식의 MPM(Multi-Processing Module)에 event 방식을 추가로 지원합니다. 아파치 v2.4이전에는 거의 worker 방식으로 설정하여 대부분 고객사에서 사용하였습니다.
worker 는 쓰레드(Thread) 방식이라 메모리 등의 리소스 활용에 유리하고, prefork 는 프로세스를 새로 생성(fork)하는 방식이라 메모리는 많이 차지하지만, 초기에는 보다 안정적이었기 때문에, PHP 등의 모듈에서는 prefork 방식을 사용하도록 권장하였습니다.
아파치가 현재 사용하고 있는 MPM 방식은 아래와 같이 확인하면 됩니다.
$ apachectl -V | grep mpm
1. prefork MPM
아파치가 기동되면서 설정된 개수의 자식 프로세스가 fork되어 요청을 기다리는 방식입니다. * 장점: 1) 성숙하고 안정적이며 모든 신규 및 기존 모듈과 호환됨. 2) 안정성 측면에서는 스레드보다는 프로세스가 더 안정적임 3) mod_php, PHP 확장 등 스레드 safe 하지 않은 모듈과 호환됨 * 단점: 1) 프로세스는 상대적으로 메모리 등 더 많은 시스템 리소스를 차지함 2) 동시성이 높은 요청을 처리하는 데 비효율적임 |
* httpd.conf 설정 예시
<IfModule mpm_prefork_module >
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
2. worker MPM
다중 프로세스 및 다중 스레드의 혼합 모드를 사용합니다. 또한 여러 자식 프로세스를 미리 생성하고, 각 자식 프로세스는 멀티 스레드 처리합니다. 요청이 오면 1개의 스레드에 할당됩니다. 스레드는 일반적으로 상위 프로세스의 메모리 공간을 공유하므로 스레드가 프로세스보다 가볍기 때문에 메모리 사용량이 줄어듭니다. * 장점: 1) 적은 메모리 등 리소스를 차지함 2) 높은 동시성에서 더 나은 성능을 보임 * 단점: 여러 자식 스레드가 부모 프로세스의 메모리 주소를 공유하기 때문에 스레드 안전성 문제를 고려해야 함 |
* httpd.conf 설정 예시
<IfModule mpm_worker_module >
StartServer 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChil 0
</IfModule>
3. event MPM
최신 모드로 현재 버전에서 안정적이고 사용 가능한 모드입니다. worker 모드와 매우 유사합니다. 가장 큰 차이점은 keep-alive 사용 시에 오랫동안 점유되어 있던 쓰레드의 자원을 낭비하는 문제를 해결했다는 점입니다. event MPM을 사용하려면 Linux 시스템(Linux 2.6 이상)에서 EPoll 지원이 필요합니다. * 장점: 1) 가장 높은 동시성에서 더 나은 성능을 보임 2) 가장 최근에 구현된 방식임(아파치 2.4부터 지원) * 단점: 리눅스 최신 커널에서만 지원(다른 UNIX는 지원하지 않을 수도 있음) |
* httpd.conf 설정 예시
<IfModule mpm_event_module >
StartServer 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
</IfModule>
'웹서버 > Apache' 카테고리의 다른 글
[Tips] Apache에서 gzip으로 압축하기 (0) | 2023.03.20 |
---|---|
[정보] Apache 웹서버에 HTTS를 위한 설정 및 인증서 설치 (0) | 2022.10.25 |
[Tips] 일반 계정으로 80 포트 서비스 하기 (0) | 2022.03.06 |
[Tips] Apache 프로세스 user/group에 별도 설정 방법 (0) | 2022.03.06 |
[Tips] 아파치 Error Log 이해 (0) | 2022.02.05 |