Wanted 서비스를 운영하면서 서버가 종종 서버가 죽어서 서비스가 안되는 경험이 있었습니다.

이렇게 서버가 죽는 원인을 분석하고 어떻게 해결했는지 공유해보려고 합니다.

서버에 이상이 있으면 나오는 증상

  • ssh 접속이 안된다.
  • api에 대한 응답이 없다.
  • ELB health check에 대한 응답이 없다.
  • 결국은 서버가 ELB에서 떨어지고 서비스가 Down 된다.

서버에 이상이 발생한 원인

  • 메모리 부족
  • 메모리 부족…
  • 이상이 있으면 99%는 메모리가 부족해서 서버가 먹통이 되었다.

AWS EC2에 메모리가 부족하면 나오는 증상

  • 인스턴스 먹통이 된다.
  • ssh 접근이 안된다.
  • Management console로 리붓이 안된다.
  • Management console로 stop을해도 한참 걸린다.
  • 즉, 서버를 재시작 하는데 시간이 오래 걸린다.

메모리가 부족한 원인

uwsgi가 flask application을 띄우는데 flask application이 계속 사용하면 메모리 사용량이 증가하여 어느순간 메모리가 부족한 상황 발생한다.

문제 해결 과정

  1. uwsgi process 수 조정 10개 -> 7개 (t2.small 1core 2GB)
  2. uwsgi 설정 변경 (auth-reload 관련 설정 삭제)
  3. EC2 instance type 변경 (t2.small X 3 -> t2.medium X 2) & uwsgi process 수 변경(7개 -> 10개)
  4. 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 변경된 것을 확인할 수 있다.

마지막으로 서버에 문제가 생길때마다 여러가지 시도를 해봤는데 이번에 변경한 설정으로 문제가 해결되었으면 좋겠습니다.