[t:/]$ 지식_

우아한 재기동

2023/04/10

gunicorn도 그렇지만 멀티프로세스 데몬의 gracefully restart는 중요하다.

4개의 워커가 있고 SIGHUP 재기동을 하는 상황이다. 웹서버들은 우아한 종료를 지원하므로 4개를 다 끈 후 한 번에 다 켜지 않는다. 한 개씩 종료하고 한 개씩 켠다. 이론상 서비스 다운타임이 없어야 하는데...

gunicorn 을 보니까 교체된 새 프로세스가 아직 시동이 안 걸렸는데 프로세스 떴다고 이전 프로세스를 하나 또 종료시켜버린다.

새 프로세스는 대용량 데이터를 로딩한다고 뺑이를 치고 있다. 아직 http 받을 준비가 안 됐다. 그런데 이전 프로세스들을 다 킬 시켰다..

잘헌다.. AI 시대 아닌가. 거대모델을 로딩한다고 시동 시간이 오래 걸릴 수 있다. 또는 도커의 시대 아닌가. 컨테이너 초기 어쩌고저쩌고 시간이 오래 걸릴 수도 있다.

여튼 gunicorn 우아한 재기동에 있어서 교체한 새 프로세스의 시동이 완전히 걸렸는지 트리거링을 하거나 딜레이를 주는 방법을 찾지 못했다.

그러면 모다모다? 만들어야지.

데몬형 코딩을 제대로 했다면 데몬 프로세스의 부모 PID는 1이 된다.

pgrep -P 1 gunicorn 으로 프로세스 관리자격인 gunicorn의 pid를 찾는다.

이제 이 pid가 부모인 프로세스들을 찾는다.

pgrep -P $(pgrep -P 1 gunicorn) 으로 찾으면 된다.

오호.. 이제 얘네들을 순차 SIGHUP 주면 된다.

for i in 아까 그거.
do 
kill -SIGHUP $i
sleep 30
done

이제 우아한 재기동에 있어 30초 딜레이를 충분히 주고 순차 재기동 할 수 있는 몸이 되었다. 신경숙 요즘 뭐하나.









[t:/] is not "technology - root". dawnsea, rss