GOOD4ME
[uvicorn] FastAPI multiprocessing 좀비 프로세스 원인 본문
무엇이 문제인가?
Docker swarm을 사용하여 플랫폼을 구축하던 중,
FastAPI를 사용하는 컨테이너(B/E 컨테이너)에 뭔가 문제가 있음을 확인했다.
문제인 즉, uvicorn을 사용하여 FastAPI 서버를 구동한 후,
FastAPI 서버를 종료하면
multiprocessing.semaphore_tracker가 좀비프로세스가 되는 것이었다.
root 413 1 5 10:35 pts/1 00:00:01 /usr/bin/python3 /usr/local/bin/uvicorn main:app --reload --host=x.x.x.x --port=xxxx
root 414 413 0 10:35 pts/1 00:00:00 /usr/bin/python3 -c from multiprocessing.semaphore_tracker import main;main(4)
root 415 413 25 10:35 pts/1 00:00:06 /usr/bin/python3 -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=5, pipe_handle=7) --multiprocessing-fork
user 17521 18964 0 10:36 pts/3 00:00:00 grep --color=auto python
root 414 1 0 10:35 pts/1 00:00:00 python <defunct>
user 17521 18964 0 10:36 pts/3 00:00:00 grep --color=auto python
해결 시도를 해보았는가?
우선적으로 필자의 출중한 GSS(Google Search Skills)를 통해
간단하게 문제를 해결해보려고 했으나,
검색 키워드가 잘못되었는지, GSS를 통해서 답을 찾을 수는 없었다.
아무래도 스스로 해결해야 할 듯 싶어
다시 한 번 유심히 프로세스 창을 살펴보았다.
음... multiporcessing 프로세스들은 main 파일을 실행하는 uvicorn 프로세스가 부모 프로세스이고
main파일을 실행하는 uvicorn 프로세스는 PID 1이 부모 프로세스다...
그리고 FastAPI를 죽이면 multiprocessing 프로세스들의 부모 프로세스가 PID 1이 된다...
아❓ 그럼 도대체 PID 1의 정체가 뭐길래
multiprocessing 프로세스가 이지경이 되는걸까❓
확인해보니, PID 1의 정체는 /sbin/init 이었고,
이러한 현상이 발생한 이유는
docker-compose.yml 작성 당시, container 서비스에 command: /sbin/init 구문을 넣었기 때문이었다.작성 당시 privileged: true 구문이 필요했었는데 이 구문 사용을 위해 command: /sbin/init 를 추가했던 것이 화근이었다😂😂
docker-compose.yml 파일에서
B/E 컨테이너 서비스 구문 중 command: /sbin/init을 제거한 후,
다시 시도해보니 좀비프로세스 문제가 해결되었다😁
'개발.오류.정리 > Python' 카테고리의 다른 글
ValueError, Out of range float values are not JSON compliant (0) | 2023.04.24 |
---|---|
[pandas] Index contains duplicate entries, cannot reshape (0) | 2022.11.28 |