티스토리 뷰

Apache 2.x (이하 아파치 2)에서는 MPM (Multi-Processing Modules) 기능이 제공되는데, 의미하는 것 처럼 다양한 서버 형태(multi-threaded, process)를 지원합니다.

일반적인 옵션으로 컴파일 할 경우, prefork 형태로 컴파일 되는데, 멀티 CPU 환경에서는 worker model이 더 좋은 성능을 보여줍니다.

prefork 형태는 하나의 child process가 한번에 하나의 접속만 처리하게 되어 있어서 동시 접속자가 많아질 경우 프로세스의 갯수가 많아지게 되고 CPU 자원을 소진하기 전에 메모리를 다 쓰고 스왑 영역까지 사용하게 되어 전반적인 성능이 떨어질 수 있게 됩니다.

worker 형태는 prefork 보다 적은 갯수의 child process가 생성되고 각 child process에서 쓰레드를 이용해서 각 접속자를 처리하기 때문에 많은 프로세스가 필요하지 않고 따라서 메모리도 절약할 수 있게 됩니다. worker 형태를 지원하기 위해서는 아파치 2를 설치할 때 --with-mpm=worker 옵션을 주어서 configure를 실행하면 됩니다.
(httpd.conf에서도 MPM 설정을 활성화시키고 상황에 맞게 값을 변경할 필요가 있습니다.)

(현재 설치된 아파치 형태는 apachectl -l 로 확인할 수 있습니다.)

아파치 2 기본 설정으로 컴파일 하고 ab로 간단히 성능 테스트를 한 결과는 다음과 같습니다.

1. prefork
테스트시간(초) 16.570, 15.512, 15.435
처리량 (회/초)    6034,   6446,   6478

2. worker
테스트시간(초) 12.229, 11.760, 12.630
처리량 (회/초)    8117,   8501,   7913

위의 테스트 결과에서 알 수 있다시피 worker model이 prefork model에 비해서 약 35% 정도
성능 향상이 있음을 알 수 있습니다.


더욱이 prefork model에서는 프로세스가 종료되기 직전에 localhost로 한번 접속을 하고
종료하는 dummy connection이 일어나기 때문에 로그 파일도 지저분해 질 수 있고
부가적인 부하도 발생합니다.

참고)
아파치 2가 실행중인 웹서버에서 ifconfig 명령어로 lo (로컬 루프백 인터페이스) 부분의
전송량(RX bytes, TX bytes) 부분이 지나치게 많은 경우, 아파치 2의 dummy connection의
영향일 가능성이 큽니다. 자세히 원인을 파악하기 위해서는 루트 권한으로 tcpdump -i lo 를 실행하면 lo를 통해서 전송되는 데이터, 주소, 포트 등을 확인할 수 있습니다.

access 로그에서 아래와 같은 로그가 남는 것은 dummy connection에 의해서 생기는 것입니다.

127.0.0.1 - - [08/Apr/2008:18:16:44 +0900] "GET / HTTP/1.0" 200 5140
::1 - - [08/Apr/2008:18:16:44 +0900] "GET / HTTP/1.0" 200 5140

또는

127.0.0.1 - - [08/Apr/2008:18:16:44 +0900] "OPTIONS * HTTP/1.0" 200 5140
::1 - - [08/Apr/2008:18:16:44 +0900] "OPTIONS * HTTP/1.0" 200 5140


worker를 사용하면 성능이 개선되긴 하지만, 몇 가지 주의할 점이 있습니다.

(1) PHP를 아파치 모듈 차원에서 지원이 안 되고 CGI나 FAST CGI 형태로 사용해야 합니다.
(2) 쓰레드를 이용하기 때문에 하나의 쓰레드에 이상이 생길 경우 같은 프로세스 내의 다른
쓰레드에도 영향을 줄 수 있습니다.
(3) prefork 모델에 비해서는 robust 하지는 않습니다.


한 줄 요약)
성능이 중요하고 php를 사용하지 않는 경우에는 worker를 이용하자.

참고 자료
http://www.oscom.org/events/oscom4/proposals/apache2.html

참고 PDF

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크