Docker 컨테이너가 죽는 이슈

Daeyoung Nam·2021년 7월 17일
4

프로젝트

목록 보기
4/16

아니 왜 접속할때마다 MySql컨테이너가 다운되어있지?

저번에 만든 Github grouping 웹사이트에 하루 단위로 접속하려고 하면 로그인이 안되는 이슈가 있었다.
docker ps 로 nginx, spring 컨테이너가 죽지 않고 mysql이 죽은걸 확인했고 mysql서버랑 커넥션이 안되니 spring에서는 에러와 함께 로그인이 안됬던것이다...

서버 환경

일단 서버 환경은 매우매우 열악하다.
OS는 Ubuntu고 돈이 없어서 1gb 램에 1core cpu를 사용한다.
일부러 열악하게 구성한 것도 있긴하다. 왜냐하면 나의 성능좋은 로컬에서 터지지 않을 이슈들이 많이 터질것이기 때문에 그런것들을 경험하기 위해서다.

무슨 이유일까?

처음에 내가 사용중인 mysql의 container log를 확인했는데 오류뜬것도 없어서 이건 다른문제다 싶었다.
그래서 구글에 docker container가 이유없이 죽는 것에 대해 검색을 좀 해보니 OOM Killer라는 놈이 자동으로 죽일 수 있다는것을 알게되었다.
그리고 ubuntu syslog를 뒤져보니 실제로 OOM killer가 나의 mysql을 죽인 로그를 발견할 수 있었다

Jul 17 08:28:56 vultr kernel: [667137.895505] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=6aedf59747c4c2a4cd9d13eeaf10f6b751fd1ab5812fcf7b248d2200c2e2ccef,mems_allowed=0,global_oom,task_memcg=/docker/6aedf59747c4c2a4cd9d13eeaf10f6b751fd1ab5812fcf7b248d2200c2e2ccef,task=mysqld,pid=77456,uid=999
Jul 17 08:28:56 vultr kernel: [667137.895616] Out of memory: Killed process 77456 (mysqld) total-vm:1287308kB, anon-rss:346288kB, file-rss:0kB, shmem-rss:0kB, UID:999 pgtables:1040kB oom_score_adj:0

시스템 로그를 확인해보니 진짜 OOM killer가 나의 mysql을 계속 죽였다..;;
나의 환경은 매우매우 열악하니 그냥 컨테이너가 죽을때마다 계속 restart 시켜주도록 docker 설정을 할 수도있고 메모리 제한을 걸어버리는 방법도 있겠다.
난 이것을 둘다 적용시키기로 했다.

version: '3.0'

services:
  service_db:
    # platform: linux/x86_64
    image: mysql:8.0.23  # 이미지
    cap_add:
      - SYS_NICE
    container_name: database
    restart: 'always'
    ports:
      - "3306:3306"   # 포트 설정  외부:내부
    environment:
      MYSQL_DATABASE: ####
      MYSQL_ROOT_HOST: '%'
      MYSQL_ROOT_PASSWORD: ####
    deploy:
      resources:
        limits:
          memory: 500M
        reservations:
          memory: 300M
          

OOM Killer?

Linux의 메모리 관리에서는 메모리 오버커밋이라는 메커니즘이 적용되어 있어 실제 메모리 이상의 공간을 확보할 수 있다. 이는 어떤 문제를 야기시킬 수 있는가 하면 Linux 가상 메모리 시스템은 프로세스가 메모리를 확보할 때는 많게 보이게 하고 실제로 프로세스가 메모리에 접근을 하게되면 실제 메모리를 할당하는데 이때 실제 메모리가 부족하게 되면 OS내부적으로 프로세스를 마음대로 kill을 해버린다. 이른바 OOM-killer(out of memory killer)라고도 한다.

출처: https://jujupapa.tistory.com/37 [아빠의 로망!]

profile
내가 짠 코드가 제일 깔끔해야하고 내가 만든 서버는 제일 탄탄해야한다 .. 😎

0개의 댓글