EC2의 사이즈를 small 정도로 운영하니 메모리가 99%가 뜨면서 결국 서버가 내려가게 되었던 이슈가 있었다.
해당 이슈는 nginx의 세팅을 해줘서 메모리 누수를 막아줘야하는 이슈라고 한다.
나는 아래 블로그를 보고 참고했는데, 해결방법이 다양하니 밑에 여러 방안을 작성해봤다.
https://velog.io/@stay136/gunicorn%EA%B3%BC-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%88%84%EC%88%98
원인 1)
gunicorn의 max connection을 지정 안해주면 default(4개)로 잡히는데,
연결 안끊고 클라이언트가 5개이상 붙어있으면 서버가 클라이언트 소켓 accept를 못하게되고 무한으로 pending 되게 되는 현상으로 메모리 누수현상이 일어나게 된다.
그래서 elastic beanstalk cpu > 95% 이러다가 max connection이 5개 이상 잡히는 순간
> 99% 가 되서 elastic beastalk 가 동작을 멈춘다.
원인 2)
gunicorn의 max connection 문제가 아니라 docker hard limit가 512mb인데, 배포한 컨테이너가 이 메모리양을 넘었기 때문에 발생한 것이다.
때문에 웹서버가 띄워지면서 api를 수행하게 되고 메모리가 점점 차올라서 512mb를 넘게 되는것이다.
docker의 hard limit를 늘려주자.
docker run --memory=1g app
위처럼 해볼 수 있고
version: '3'
services:
app:
image: app
mem_limit: 1g
docker-compose 시에는 위처럼 할수도 있다.
그리고 gunicorn의 timeout을 늘려줘야한다. 용량이 크다는건 그만큼 배포할때 오래걸린다는 뜻이니까 말이다.
--timeout=60
위처럼 타임아웃을 늘려줘야한다.
'AWS > ElasticBeanstalk' 카테고리의 다른 글
AWS Elastic Beanstalk - (17) (0) | 2023.03.05 |
---|---|
AWS Elastic Beanstalk - (16) (0) | 2023.03.04 |
AWS Elastic Beanstalk - (15) (0) | 2023.03.02 |
AWS Elastic Beanstalk - (14) (0) | 2023.03.01 |
AWS Elastic Beanstalk - (13) (0) | 2023.02.28 |