티스토리 뷰

네트워크/서버_클라이언트

Apache MPM

로또_ 2019. 10. 9. 18:06

아파치 서버 MPM(Apache Multi-Processing Modules)

아파치 서버가 클라이언트에게서 받아들인 요청을 처리하기 위하여 자식 프로세스들에게 분배하는 모듈입니다. prefork 방식과 worker 방식이 있습니다.

 


Prefork

하나의 자식 프로세스가 하나의 스레드를 갖는 구조로, 자식 프로세스는 최대 1024개까지 가능합니다. 프로세스로 운영되기 때문에 스레드 간 메모리 공유를 하지 않습니다(독립적이라 안정적인 대신에 메모리를 많이 사용합니다.). 실행 중인 프로세스 복제하여 실행합니다(메모리 영역까지 같이 복제). 응답 프로세스를 미리 띄워놓고 클라이언트 요청 시 자식 프로세스가 반응하게 되는 방식이며, 일반적으로 single CPU 또는 Dual CPU에서 성능이 좋습니다.

 


 

worker

prefork보다 메모리 사용량 적음. 통신량이 많은 서버에 적절합니다(=동시접속자가 많은 사이트에 적합). 프로세스당 스레드(연결) 여러 개이며 최대 64개의 스레드 처리가 가능합니다. 즉, 자식 프로세스들이 각각 여러 스레드를 사용하며, 각 스레드는 한번에 한 연결을 담당합니다. 한 프로세스의 스레드는 스레드간에 메모리를 공유하며, worker 방식은 일반적으로 멀티 CPU 시스템에서 성능이 좋습니다.

 


event

Event Driven 방식에 대해 설명을 하자면, 요청이 들어오면 어떤 동작을 해야하는지만 알려주고 다른요청을 처리하는 방식입니다. Nginx는 Event Driven 방식의 웹 서버로 유명합니다. 하지만 Apache는 그동안에 Event Driven 방식을 지원하지 않았습니다. 대신 한 개의 동접 클라이언트당 한 개의 스레드(or 프로세스) 구조였고 이 때문에 한 클라이언트가 맺은 접속이 완전히 끝나지 않는 한 스레드 혹은 프로세스가 죽지 않는 방법을 사용했습니다.(=Keep Alive) 그러므로 대량 접속에서는 효율이 급격하게 떨어지는 문제점도 안고 있었습니다. 이러한 문제를 해결하기 위해 Apache 2.4부터는 Event MPM을 사용할 수 있게 되었습니다. Event MPM을 사용하기 위해서는 Kqueue나 Epoll 과 호환되는 시스템이 필요합니다.

 

 

https://bkjeon1614.tistory.com/23 여기에서 더 알아봐야 겠다.

httpd 기본 mpm방식은? prefork이면 worker로 바꾸어서 해보아야겠다.

잠깐만... 지금 사용하는 방식은 worker인거 같은데?? 다중 스레드 방식???

아니다 docker로 만들어서 확인해보니 event 방식이다.

 

다중코어에서 병목지점은 어디인가??? cpu와 ram메모리 구간?

출처: https://bkjeon1614.tistory.com/23 [아무거나]

 

반응형