잘 작동하던 Gunicorn이 계속! 간헐적으로! 죽어!
log를 확인하니 oom killer
메모리 부족? CloudWatch Agent 설치해서 메모리 사용률을 확인해본 결과

고점찍고 나락간 메모리 사용률

죽었어요.. 그럼 다시 살려야겠죠? 근데 또 죽죠? 다시 살리면 그만이죠ㅎㅎ?

그냥 죽으면 알아서 부활하자...

gunicorn oom killer에 대한 많은 검색 결과를 확인할 수 있었다.
많은 사람들이 겪었던 문제이고 해결 방법도 어렵지 않았다.
메모리 부족의 원인은 메모리 누수

gunicorn 공식 문서에서 max_requests, max_requests_jitter 설정을 찾을 수 있었다.
Gunicorn 공식 문서 - max_requests
requests를 제한하고 프로세스를 재시작해서 메모리 누수가 일어나지 않도록 한다.
프로세스들이 동시에 재시작하지 않도록 max-requests-jitter 난수를 설정한다.

gunicorn의 적정 workers 개수도 궁금했는데, 공식 문서에 잘 나와있었다.
Gunicorn 공식 문서 - workers
다른 많은 포스팅에서 아래와 같이 사용하는 것 같다.
workers = 2 x $(NUM_CORES) + 1

부활 테스트

vCPU 2개를 사용하니까 workers는 5
--max-requests-jitter = 50

max requests: 1000 -> 어? 죽었네
max requests: 100 -> 어..? 또?
max requests: 50 -> 80% 찍고 다시 내려간 메모리 사용률

최적화 진행!
workers = 5, max requests = 50, max requests jitter = 50으로 설정하고 모니터링을 지속하기로 했다.

🙄 P.S.

백엔드 API의 문제로 서버가 멈췄던 경험은 있었어도 갑자기 서버가 죽는 문제는 처음이었다.
백엔드의 핵심 경험 중 하나는 대용량 트래픽 처리라고 생각하는데, 살짝 맛 본 느낌이지만 굉장히 흥미로웠다. 나 이런 거 좋아하네

🙇🏻‍ 잘못된 정보는 댓글을 통해 알려주시면 감사하겠습니다.

profile
Focus on growth rather than material

0개의 댓글

Powered by GraphCDN, the GraphQL CDN