WEB/APACHE

16. 중단과 재시작(stop and restart)

coldplayer83 2025. 7. 3. 10:39
728x90
반응형

https://httpd.apache.org/docs/2.4/stopping.html

 

중단과 재시작 - Apache HTTP Server Version 2.4

아파치를 중단하고 재시작하려면 실행하고 있는 httpd 프로세스에 시그널을 보내야 한다. 시그널을 보내는 방법은 두가지다. 하나는 유닉스 kill 명령어를 사용하여 프로세스에 직접 시그널을 보

httpd.apache.org

 

아파치를 중단하고 재시작하려면 실행하고 있는 httpd의 부모 프로세스에 시그널을 보내면 됨

부모에게 보낼 수 있는 시그널

- TERM(stop)

- HUP(restart)

- USR1(graceful)

 

위의 세 가지 아규먼트들로 httpd를 실행하는 apachectl 스크립트를 사용하기를 권장함

 


 

TERM(stop) - 즉시 중단

apachectl -k stop


TERM이나 stop 시그널을 부모에게 보내면 즉시 모든 자식을 죽임

자식을 완전히 죽이는데는 몇 초가 걸릴 수 있으며, 그 후 부모가 종료됨

처리중인 요청은 중단되고, 더 이상 요청을 받지않는다

 

HUP(restart) - 즉시 재시작

apachectl -k restart

 

HUP이나 restart 시그널을 부모에게 보내면 TERM과 같이 모든 자식 프로세스를 죽이지만 부모 프로세스는 종료하지 않음

부모는 설정파일을 다시읽고 로그파일을 다시 열고 새로운 자식들을 만들고 서비스를 계속함

mod_status 사용자는 HUP를 보내면 서버 통계가 0이 됨을 알 수 있음

설정파일에 오류가 있다면 재시작을 해도 부모는 재시작하지 않고 오류를 내며 종료함

이를 피하는 방법은 아래 더보기 참고

 

USR1(graceful) - 점잖은 재시작

apachectl -k graceful

 

USR1이나 graceful 시그널을 부모에게 보내면 부모 프로세스는 자식들에게 현재 요청을 처리한후 종료하라고 함

(현재 아무것도 처리하지 않고 있다면 즉시 종료)

부모는 설정파일을 다시읽고 로그파일도 다시 엶

자식이 죽을때마다 부모는 죽은 자식대신 새로운 설정에 기초한 자식을 실행하여 즉시 요청을 처리하게 함

점잖은 재시작(graceful restart)으로 USR1을 사용할 수 없는 플랫폼에서는 대신 (WINCH와 같은) 다른 시그널을 사용할 수 있음 apachectl graceful은 플랫폼에 알맞은 시그널을 보낸다
점잖은 재시작은 항상 MPM의 프로세스 조절 지시어 설정을 고려하여 재시작동안 클라이언트를 서비스하는 프로세스나 쓰레드가 적당한 수를 유지하도록 설계되었음

StartServers는 일초 후 최소한 StartServers만큼 새로운 자식이 안만들어지면 자식 프로세스가 StartServers의 개수가 되도록 새로 만듦

즉, 프로그램은 서버의 현재 부하에 알맞은 자식 프로세스의 개수 및 StartServers 파라미터 값을 유지하려고 함 

mod_status 사용자는 USR1을 받을때 서버 통계가 0이 되지 않음을 확인할 수 있음 

서버는 새로운 요청을 (운영체제는 이들을 큐에 담아서 어떤 경우에도 잃어버리지 않음) 처리하지 못하는 시간을 최소화하고 사용자의 튜닝 파라미터를 유지하려고 함 

이를 위해 세대간 모든 자식 프로세스를 기록하는 scoreboard를 유지

status 모듈은 또한 점잖은 재시작 전에 시작하여 아직도 요청을 처리하고 있는 자식을 G로 알려줌

현재로는 USR1을 사용하는 로그순환 스크립트가 재시작전에 모든 자식이 로그작성을 마쳤는지 알 수 있는 방법이 없음

따라서 USR1 시그널을 보내고 적당한 시간이 지난후 이전 로그를 다루도록 제안함

ex) 낮은 대역폭 사용자의 경우 접속 대부분이 마치는데 10분이 안걸린다면, 이전 로그를 다루기전에 15분 기다린다

 

더보기

graceful 재시작 전 설정 파일 검사가 선행되어야 함

 

설정파일에 오류가 있다면 재시작시 부모는 재시작하지 않고 오류를 내며 종료됨

graceful의 경우 종료할때 자식 프로세스가 실행되도록 놔두며, (자식들은 자신의 마지막 요청을 처리하고 gracefully stop) 이는 서버를 재시작할때 문제가 됨 -> 포트 연결 불가

 

재시작전에 -t 명령행 옵션(httpd 참고)으로 설정파일 문법을 검사할 수 있으나 이런 검사도 서버가 올바로 재시작할지를 보장하지 못함

설정파일의 문법과 의미를 검사하려면 root가 아닌 사용자로 httpd를 시작해볼 수 있다

root가 아니기때문에 (아니면 현재 그 포트를 사용하는 httpd가 실행되고 있기 때문에) 오류가 없다면 소켓과 로그파일을 열려고 시도하는 과정에서 실패할 것

다른 이유때문에 실패한다면 설정파일에 오류가 있을 가능성이 있음

728x90
반응형