여러개의 아파치 프로세스가 떠 있는 이유가 궁금합니다

개인 컴터에 아파치를 설치해서 운영중입니다.

문제는 여러개의 아파치 프로세서가 돌고 있다는 겁니다. 원래 그런건지 모르겠지만 때에 따라 그 갯수도 달라집니다.

ps aux | grep apache의 결과 아래와 같습니다.

[code:46sgahgp]itsme@MyServer:~$ ps aux | grep apache
root 2325 0.0 1.2 29900 6444 ? Ss 08:43 0:00 /usr/sbin/apache2 -k start
www-data 2349 0.0 1.4 31008 7372 ? S 08:43 0:00 /usr/sbin/apache2 -k start
www-data 2350 0.0 1.3 31004 6836 ? S 08:43 0:00 /usr/sbin/apache2 -k start
www-data 2351 0.0 2.3 35112 11624 ? S 08:43 0:01 /usr/sbin/apache2 -k start
www-data 2352 0.0 1.3 30988 7004 ? S 08:43 0:00 /usr/sbin/apache2 -k start
www-data 2353 0.0 1.4 31004 7304 ? S 08:43 0:00 /usr/sbin/apache2 -k start
www-data 2867 0.0 1.7 32672 8892 ? S 09:35 0:00 /usr/sbin/apache2 -k start
www-data 2870 0.0 1.4 31064 7080 ? S 09:35 0:00 /usr/sbin/apache2 -k start
www-data 2871 0.0 1.9 34084 9700 ? S 09:35 0:00 /usr/sbin/apache2 -k start
www-data 2872 0.0 1.3 31064 7020 ? S 09:35 0:00 /usr/sbin/apache2 -k start
www-data 4958 0.0 1.4 31064 7280 ? S 12:40 0:00 /usr/sbin/apache2 -k start
itsme 7529 0.0 0.1 3336 792 pts/0 S<+ 17:07 0:00 grep apache
[/code:46sgahgp]

netstat 명령으로 살펴봐도 현재 ESTABLISHED 가 아니라 "LISTED" 상태 뿐인데도 말입니다.

원래 그런건지 아니면 뭔가 문제가 있는 것인지 모르겠습니다. 괜히 메로리만 한 프로세스당 1.3 ~ 2.3 %씩 사용되니 신경이 좀 쓰입니다.

왜 이럴까요?

이유는 간단합니다. prefork방식이냐 worker방식이냐를 떠나서

실행되면 MinSpareServers 만큼 예비서버를 준비해두고 MaxSpareServers만큼 예비서버 프로세스를 만듭니다.

아무런 접속이 없더라도 MinSpareServers만큼은 생성합니다. 이유는 갑자기 많은 요청이 들어와도 잘 대처하기 위함이지요.
(그외에 복잡한 이유는 모두 패스~)

아파치 관련 사이트에 가셔서 해당 옵션에 대해 검색해 보시면 더 자세한 설명이 있을겁니다.

우분투라면 /etc/apache2/apache2.conf에서 해당 설정을 찾으실 수 있습니다.

[quote:3novmi7m]<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>

Ifmodule 지시자

mpm_prefork : 전통적인 처리 방식(프로세스)

StartServers

아파치 데몬이 시작될 때 자식 프로세스 개수 설정

MinSpareServers, MaxSpareServers

유휴상태(Idle) 자식프로세스가 MinSpareServers의 개수보다 적을 경우 추가로 생성하게 되고, 유후(Idle) 자식프로세스가 MaxSpareServers의 개수보다 많을 경우 소멸시킨다.[/quote:3novmi7m]

아마도 apache2.conf 파일 보시면 기본적으로 위 설정으로 되어 있을 겁니다.
MinSpareServers가 5개고 MaxSpareServers가 10개입니다 올려주신 내용 보시면 www-data 권한으로 생성된 apache2 프로세스가 10개일껍니다.(서버가 유휴상태라면)
/etc/init.d/apache2 restart 해보시면 www-data 권한의 apache2 프로세스가 5개로 줄어드는 것을 볼 수 있을 겁니다.

이렇게 5~10개 사이의 프로세스를 항상 띄워놓는 것은
자원의 효율적 관리를 통해 시스템의 부하를 줄이기 위한 것입니다.

만일 요청이 하나 들어올때마다 프로세스를 하나씩 생성하고 소멸시킨다면
100번의 요청이 들어오면 100개의 프로세스를 생성하고 소멸시켜야할껍니다.
그런데 그 100개의 요청이 순차적으로 10개 10개 10개씩 끊어서
시간차를 두고 5번 해서 100번 들어온다면
10개의 프로세스가 작업이 끝난 다음 다시 10개 처리하는 식으로
10개의 프로세스만으로 처리가 가능합니다.
프로세스의 생성은 시스템에 상당한 부하를 일으킵니다.
그래서 미리 생성해놓고 들어오면 바로바로 처리하기도 하고
어느정도는 대기함으로서 프로세스 자원을 효율적으로 활용하는 것이죠.

위에서 중요한건 유후상태일때의 의미를 말합니다.

두 분 모두 감사합니다.

유용한 정보 알게되었습니다.