← 문제 라이브러리
Linux 중급 18분

새벽마다 DB가 사라짐: OOM killer가 mysqld를 종료

사내 주문 DB(MySQL)가 며칠에 한 번씩 새벽 2시 10분쯤 갑자기 내려갔다가 자동으로 다시 뜹니다.

검수된 문제무료
시나리오

사내 주문 DB(MySQL)가 며칠에 한 번씩 새벽 2시 10분쯤 갑자기 내려갔다가 자동으로 다시 뜹니다. 그때마다 새벽 주문 몇 건이 실패합니다. 이 서버(메모리 16GB)에는 DB와 함께 매일 새벽 2시에 도는 매출 리포트 배치도 있습니다. 지난달 리포트가 다루는 기간을 1년으로 늘렸습니다. DBA는 MySQL 버그라며 버전 업그레이드를 검토하고 있습니다. MySQL 에러 로그에는 종료 직전 아무 오류도 없이, 다시 시작하면서 크래시 복구를 했다는 기록만 남아 있습니다.

단서
journalctl -k (02:10 무렵)
report-batch invoked oom-killer: gfp_mask=0x140cca(GFP_HIGHUSER_MOVABLE|__GFP_COMP), order=0, oom_score_adj=0
Out of memory: Killed process 1843 (mysqld) total-vm:13421772kB, anon-rss:6815744kB, file-rss:0kB, shmem-rss:0kB, UID:27 pgtables:14336kB oom_score_adj:0
배치 로그 · 메모리
02:00:02 report-batch start range=365d
02:09:51 loaded 41,280,113 rows into memory

$ free -g   # 평소
       total  used  free  shared  buff/cache  available
Mem:      15     8     1       0           6          6
Swap:      0     0     0

과제 원인을 좁히고, 서비스를 되살리는 순서(검증 포함)와 재발 방지책을 적어 보세요.

먼저 볼 것
  • 누가 메모리를 쓰다가 누가 죽었는지 구분하기
  • 커널 로그로 프로세스 종료 원인 확인하기
점검 체크리스트
  1. journalctl -k / dmesg 에서 invoked oom-killer 와 Killed process 줄
  2. 그 시각에 도는 작업(cron·타이머)과 메모리 사용량
  3. DB 설정의 메모리(버퍼 풀) 크기