
오늘 오전에 서버가 죽었는데 메모리 부족의 문제가 의심된다. 하지만 지난 20일 동안 문제가 없었는데 당황스럽다. 20일 동안 별 문제가 없었는데도 불구하고 대회 전날 서버가 맛탱이가 가버리다니 시기가 운명의 장난같다.
20일 동안 누적되어오던 메모리 누수의 결과로 오늘 오전에 문제가 발생한 것인지, 아니면 잠재적인 문제가 존재하고 있었는데 마침 연속된 우연의 일치로 문제가 터져서 서버가 다운된 건지는 조사해볼 필요가 있다.

이런 경우에는 EC2 서버를 재실행 한 뒤 깃허브에서 CD 파이프라인을 실행시켜주면 간단히 서버를 복구할 수 있지만
그 전에 [작업] -> [모니터링 및 문제 해결] -> [인스턴스 스크린샷 가져오기] 순서로 진짜 원인을 파악해보았더니 정말 OOM(메모리 사망) 문제였다.

EC2를 재부팅했다. 로그기록이 차오르다가 디스크 용량을 넘어서는 수준까지가서 그것이 메모리에 영향을 끼친게 아닐까 생각도 해봤지만 전체 디스크의 23%만 사용중인 수준인걸 보아서 그건 아닌 것 같다.
메모리 누수가 맞다면 메모리 사용량이 점진적으로 올라가는 모습을 시간에 따라 보여줘야한다. 만약 20일 동안에 걸쳐서 발생했다면 지금 당장 현상 재현은 힘드니 더 지켜볼 일이다.
재부팅하자마자 메모리 사용량이 57%라는 점도 눈여겨볼 만 한데, 아무것도 안했는데 절반 이상의 메모리가 일하고 있다면 조금만 트래픽이 높아져도 OOM이 발생한다는 뜻이다. 현재 가장 유력한 원인으로 생각한다.

그라파나를 이용해서 오전 1시쯤 서버가 OOM으로 다운되기 전까지 기록을 들쳐보았다. 그라파나는 볼 줄 몰라서 제미나이에게 의뢰한 결과 아래와 같이 답변해줬다.
'JVM Memory Pools' 섹터는 이번 장애의 근본 원인이 단순한 전체 메모리 부족을 넘어, 자바 내부의 메모리 관리 한계에 부딪혔음을 아주 명확하게 보여주고 있습니다. 이 그래프들을 통해 알 수 있는 구체적인 문제 상황은 다음과 같습니다.
1. G1 Eden Space의 불안정한 요동
- 현상: 그래프 왼쪽 상단의 'G1 Eden Space'를 보면, 장애 직전인 12월 18일 00:00경부터 초록색 선(used)이 급격하게 요동치며 상단 점선(committed)에 계속 부딪히는 것을 볼 수 있습니다.
- 의미: Eden 영역은 새로운 객체가 생성되는 공간입니다. 이 공간이 꽉 차서 비우려고(Minor GC) 노력해도, 처리해야 할 데이터가 너무 많아 금방 다시 차오르는 '메모리 압박' 상태가 지속되었습니다.
2. G1 Old Gen의 급격한 상승 (결정적 증거)
- 현상: 중앙 상단의 'G1 Old Gen' 그래프를 주목해 주세요. 12/18 00:00 직후에 하늘색 선(committed)과 초록색 선(used)이 수직에 가깝게 튀어 오르는 구간이 있습니다.
- 의미: Eden 영역에서 소화하지 못한 객체들이 'Old 영역'으로 급격히 넘어갔음을 뜻합니다. 보통 메모리 누수가 있거나, 순간적으로 매우 큰 데이터를 처리할 때 이런 현상이 발생합니다. 이 영역마저 가득 차면 자바는 더 이상 버티지 못하고 멈추게 됩니다.
3. '임계치 도달'을 뒷받침하는 지표들
- Committed vs Used: 여러 그래프에서 used(실제 사용량)가 committed(자바가 OS로부터 할당받은 양)에 거의 근접해 있습니다. 이는 자바가 쓸 수 있는 방이 이미 꽉 찼다는 뜻입니다.
- 비정상적인 스파이크: 'G1 Survivor Space'에서도 평소보다 훨씬 높은 스파이크들이 관찰되는데, 이는 객체들이 메모리에서 해제되지 못하고 계속 살아남아 영역을 옮겨 다니며 시스템 부하를 가중시켰음을 보여줍니다.

아래 사진을 보면 JVM Heap이 17일 22일경부터 높게 유지되는 부분을 볼 수 있는데, 이 부분이 결정적인 원인이었을 것이다. 자바 앱이 할당된 메모리보다 더 많은 메모리를 요구했고, 그 응석을 2시간동안 들어주다가 OS가 자바앱을 강제 종료 시킨 것이다.

이 부분이 결정적인것 같다. 자바 앱이 할당된 메모리보다 더 많은 메모리를 요구했고, 그 응석을 2시간동안 들어주다가 OS가 자바앱을 강제 종료 시킨 것이다.
결론을 내보자면, 현재 백엔드 시스템은 아슬아슬한 메모리 수준에서 동작하고 있었고, 평소엔 운 좋게 버텼지만 결국 터질 일이 터진 것이다. 하지만 18일 새벽 쯤에 왜 메모리가 갑자기 많이 필요했는지는 알 수 없다. 원인이 무엇인지 파악할 수 있는 파이프라인을 구축하는 것이 시급하다고 할 수 있겠다.
'일반' 카테고리의 다른 글
| 제미나이가 틀리게 알려준 플레이스토어 프로덕션 심사 (0) | 2025.11.01 |
|---|---|
| 카카오 테크 캠퍼스 3기 백엔드 합격 (1) | 2025.04.09 |