사내 주문 DB(MySQL)가 며칠에 한 번씩 새벽 2시 10분쯤 갑자기 내려갔다가 자동으로 다시 뜹니다. 그때마다 새벽 주문 몇 건이 실패합니다. 이 서버(메모리 16GB)에는 DB와 함께 매일 새벽 2시에 도는 매출 리포트 배치도 있습니다. 지난달 리포트가 다루는 기간을 1년으로 늘렸습니다. DBA는 MySQL 버그라며 버전 업그레이드를 검토하고 있습니다. MySQL 에러 로그에는 종료 직전 아무 오류도 없이, 다시 시작하면서 크래시 복구를 했다는 기록만 남아 있습니다.
새벽마다 DB가 사라짐: OOM killer가 mysqld를 종료
사내 주문 DB(MySQL)가 며칠에 한 번씩 새벽 2시 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과제 원인을 좁히고, 서비스를 되살리는 순서(검증 포함)와 재발 방지책을 적어 보세요.
구독하면 이어서 볼 수 있어요
이 문제의 전체 시나리오와 점검 체크리스트, 복구 순서, 모범 풀이는 Pro 구독에서 열립니다.
먼저 볼 것
- 누가 메모리를 쓰다가 누가 죽었는지 구분하기
- 커널 로그로 프로세스 종료 원인 확인하기
점검 체크리스트
- journalctl -k / dmesg 에서 invoked oom-killer 와 Killed process 줄
- 그 시각에 도는 작업(cron·타이머)과 메모리 사용량
- DB 설정의 메모리(버퍼 풀) 크기
복구와 재발 방지
같이 보면 좋은 질문
현장에서 본 비슷한 케이스
0/10