[Gunicorn] 멀티 프로세스 서버 로그 분석 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

1. 개요

멀티 프로세스 아키텍쳐에서 서버 로그가 어떻게 뜨는지를 분석함으로써 아키텍쳐의 로직 이해


2. 멀티 프로세스로 서버 띄웠을 때

  • 로그

     ~/d/5-yeosa-ongi-ai │ on feat/#101_test *1 !1 ?1  gunicorn -c gunicorn.conf.py app.main:app
    
    [2025-05-30 15:22:59 +0900] [63080] [INFO] Starting gunicorn 23.0.0
    [2025-05-30 15:22:59 +0900] [63080] [INFO] Listening at: http://0.0.0.0:8000 (63080)
    [2025-05-30 15:22:59 +0900] [63080] [INFO] Using worker: uvicorn.workers.UvicornWorker
    [2025-05-30 15:22:59 +0900] [63088] [INFO] Booting worker with pid: 63088
    [2025-05-30 15:22:59 +0900] [63088] [INFO] Started server process [63088]
    [2025-05-30 15:22:59 +0900] [63088] [INFO] Waiting for application startup.
    [2025-05-30 15:22:59 +0900] [63090] [INFO] Booting worker with pid: 63090
    [2025-05-30 15:22:59 +0900] [63088] [INFO] Application startup complete.
    [2025-05-30 15:22:59 +0900] [63090] [INFO] Started server process [63090]
    [2025-05-30 15:22:59 +0900] [63090] [INFO] Waiting for application startup.
    [2025-05-30 15:22:59 +0900] [63090] [INFO] Application startup complete.
    [2025-05-30 15:22:59 +0900] [63091] [INFO] Booting worker with pid: 63091
    [2025-05-30 15:22:59 +0900] [63091] [INFO] Started server process [63091]
    [2025-05-30 15:22:59 +0900] [63091] [INFO] Waiting for application startup.
    [2025-05-30 15:22:59 +0900] [63091] [INFO] Application startup complete.
    ^C[2025-05-30 15:23:05 +0900] [63080] [INFO] Handling signal: int
    [2025-05-30 15:23:05 +0900] [63090] [INFO] Shutting down
    [2025-05-30 15:23:05 +0900] [63088] [INFO] Shutting down
    [2025-05-30 15:23:05 +0900] [63091] [INFO] Shutting down
    [2025-05-30 15:23:05 +0900] [63090] [INFO] Waiting for application shutdown.
    [2025-05-30 15:23:05 +0900] [63090] [INFO] Application shutdown complete.
    [2025-05-30 15:23:05 +0900] [63090] [INFO] Finished server process [63090]
    [2025-05-30 15:23:05 +0900] [63080] [ERROR] Worker (pid:63090) was sent SIGINT!
    [2025-05-30 15:23:05 +0900] [63088] [INFO] Waiting for application shutdown.
    [2025-05-30 15:23:05 +0900] [63091] [INFO] Waiting for application shutdown.
    [2025-05-30 15:23:05 +0900] [63088] [INFO] Application shutdown complete.
    [2025-05-30 15:23:05 +0900] [63088] [INFO] Finished server process [63088]
    [2025-05-30 15:23:05 +0900] [63091] [INFO] Application shutdown complete.
    [2025-05-30 15:23:05 +0900] [63091] [INFO] Finished server process [63091]
    [2025-05-30 15:23:05 +0900] [63080] [ERROR] Worker (pid:63091) was sent SIGINT!
    [2025-05-30 15:23:05 +0900] [63080] [ERROR] Worker (pid:63088) was sent SIGINT!
    [2025-05-30 15:23:05 +0900] [63080] [INFO] Shutting down: Master
    

a. 마스터 프로세스 시작

[2025-05-30 15:22:59 +0900] [63080] [INFO] Starting gunicorn 23.0.0
  • PID 63080인 Gunicorn 마스터 프로세스가 시작됨
  • 사용 버전: 23.0.0
[2025-05-30 15:22:59 +0933300] [63080] [INFO] Listening at: http://0.0.0.0:8000 (63080)
  • 외부에서 접근 가능한 모든 인터페이스(IP)에서 포트 8000을 리슨 중
  • 마스터 PID는 63080

b. 워커 프로세스 시작

[2025-05-30 15:22:59 +0900] [63080] [INFO] Using worker: uvicorn.workers.UvicornWorker
  • 워커는 UvicornWorker (ASGI 지원을 위한 Uvicorn 기반 워커)
[2025-05-30 15:22:59 +0900] [63088] [INFO] Booting worker with pid: 63088
[2025-05-30 15:22:59 +0900] [63090] [INFO] Booting worker with pid: 63090
[2025-05-30 15:22:59 +0900] [63091] [INFO] Booting worker with pid: 63091
  • Gunicorn이 3개의 워커를 fork()하여 실행

c. 워커 서버 초기화 및 실행

[63088/63090/63091] [INFO] Started server process [PID]
  • 각 워커가 Uvicorn 서버를 독립적으로 실행
[PID] [INFO] Waiting for application startup.
  • FastAPI 앱의 @app.on_event("startup") 훅을 실행 전 대기 중
[PID] [INFO] Application startup complete.
  • startup 훅 실행 완료. 워커 준비 완료됨

3. 서버 종료 시도 (Ctrl+C 또는 SIGINT)

a. SIGINT 시그널 발생

[2025-05-30 15:23:05 +0900] [63080] [INFO] Handling signal: int
  • 사용자가 Ctrl+C로 종료 → SIGINT 시그널 발생 (interruption)

b. 종료 신호 전파

[63088~91] [INFO] Shutting down
  • 워커들에게 종료 신호 전파

c. shutdown 훅 실행

[63088~91] [INFO] Waiting for application shutdown.
  • @app.on_event("shutdown") 훅 실행 대기

d. 워커 프로세스 종료

[PID] [INFO] Application shutdown complete.
[PID] [INFO] Finished server process [PID]
  • shutdown 완료 후 각 워커가 프로세스를 종료함
[63080] [ERROR] Worker (pid:630XX) was sent SIGINT!
  • Gunicorn이 워커에게 SIGINT를 보냈고 정상적으로 수신함

e. 마스터 종료

[63080] [INFO] Shutting down: Master
  • 모든 워커가 정상 종료된 후 마스터 프로세스도 종료