Wanted 서비스를 운영하면서 서버가 종종 서버가 죽어서 서비스가 안되는 경험이 있었습니다.
이렇게 서버가 죽는 원인을 분석하고 어떻게 해결했는지 공유해보려고 합니다.
서버에 이상이 있으면 나오는 증상
- ssh 접속이 안된다.
- api에 대한 응답이 없다.
- ELB health check에 대한 응답이 없다.
- 결국은 서버가 ELB에서 떨어지고 서비스가 Down 된다.
서버에 이상이 발생한 원인
- 메모리 부족
- 메모리 부족…
- 이상이 있으면 99%는 메모리가 부족해서 서버가 먹통이 되었다.
AWS EC2에 메모리가 부족하면 나오는 증상
- 인스턴스 먹통이 된다.
- ssh 접근이 안된다.
- Management console로 리붓이 안된다.
- Management console로 stop을해도 한참 걸린다.
- 즉, 서버를 재시작 하는데 시간이 오래 걸린다.
메모리가 부족한 원인
uwsgi가 flask application을 띄우는데 flask application이 계속 사용하면 메모리 사용량이 증가하여 어느순간 메모리가 부족한 상황 발생한다.
문제 해결 과정
- uwsgi process 수 조정 10개 -> 7개 (t2.small 1core 2GB)
- uwsgi 설정 변경 (auth-reload 관련 설정 삭제)
- EC2 instance type 변경 (t2.small X 3 -> t2.medium X 2) & uwsgi process 수 변경(7개 -> 10개)
- uwsgi 설정 변경 (process수를 줄이고 thread를 사용)
[uwsgi] home = /home/ubuntu/wantedweb/env pythonpath = /home/ubuntu/wantedweb chdir = /home/ubuntu/wantedweb daemonize = /home/ubuntu/log/wantedweb.log logto = /home/ubuntu/log/wantedweb.log module = wantedweb6:app **workers = 3** **threads = 3** max_requests = 1000 env = LANG=’ko_KR.UTF-8′ PYTHONIOENCODING = utf-8 chmod-socket = 666 enable-threads = true virtualenv = /home/ubuntu/wantedweb/env- 10개의 process에서 process 3개 thread 3개로 변경(총 9개의 thread) 메모리 사용량을 줄이고자 하였다.
문제 해결 후 메모리 사용량 변화
- Before
top - 11:17:47 up 22:29, 1 user, load average: 0.36, 0.30, 0.27 Tasks: 123 total, 3 running, 120 sleeping, 0 stopped, 0 zombie %Cpu(s): 8.0 us, 0.0 sy, 0.0 ni, 92.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 4046872 total, 3910008 used, 136864 free, 126572 buffers KiB Swap: 0 total, 0 used, 0 free. 578536 cached Mem - After
top - 11:19:27 up 22:38, 1 user, load average: 0.28, 0.26, 0.30 Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie %Cpu(s): 3.0 us, 0.0 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 4046872 total, 2364084 used, 1682788 free, 148768 buffers KiB Swap: 0 total, 0 used, 0 free. 733848 cached Mem메모리 사용량이 3910008 -> 2364084 변경된 것을 확인할 수 있다.
마지막으로 서버에 문제가 생길때마다 여러가지 시도를 해봤는데 이번에 변경한 설정으로 문제가 해결되었으면 좋겠습니다.