Go GC를 너무 믿지 마세요 - 메모리 누수 탐지와 GC 주기 조절
백엔드
Go GC를 너무 믿지 마세요 - 메모리 누수 탐지와 GC 주기 조절
두줄요약
Go GC만 믿고 메모리 증가를 넘기면 원인 파악이 늦어질 수 있음을 다뤘습니다. cgo 누수 탐지와 GOGC, GOMEMLIMIT 조절로 메모리 사용량을 개선하는 방법을 설명했습니다.
핵심 내용
- Go GC를 믿기만 해서는 해결되지 않는 메모리 증가 사례 정리
- Noir 서버의 RES와 heap 차이를 기준으로 Go 관리 메모리 외 사용 가능성 점검
- cgo 메모리 누수 탐지, GOGC·GOMEMLIMIT 조절, heap 프로파일링을 통한 과다 메모리 사용 분석
주의할 점
- Go 버전에 따라 MADV_FREE와 MADV_DONTNEED 동작 차이로 RES 해석이 달라질 수 있음
- GOGC를 과도하게 낮추면 GC 오버헤드가 커지고, 설정만으로는 문제 해결이 어려울 수 있음
- GOMEMLIMIT과 GOGC는 실험을 통해 적정값을 찾아야 함
적용해볼 점
- RES와 heap 차이가 큰 경우 cgo 포함 비Go 메모리 누수 가능성 점검
- valgrind는 cgo 전용 테스트 바이너리에 적용해 누수 확인
- gctrace, 프로파일러로 GC 주기와 메모리 사용량을 함께 관찰
