Linux 메모리 오버커밋(OOM Killer) 및 DB 서버 설정 가이드
Source
Evernote/Inbox/메모리 overcommit.md
Summary
Linux는 기본 설정(vm.overcommit_memory=0)에서 메모리 오버커밋을 허용하여, 실제 물리 메모리 부족 시 OOM Killer가 프로세스를 강제 종료한다. 이는 예외 처리 없이 프로세스가 죽어 데이터 유실(특히 DB 서버)을 유발할 수 있다. 데이터 무결성이 중요한 DB 서버(MySQL, PostgreSQL, Redis 등)의 경우, vm.overcommit_memory=2로 설정하여 메모리 부족 시 malloc이 NULL을 반환하도록 하여 애플리케이션 레벨에서 예외 처리를 가능하게 해야 한다. 또한 스왑 오버헤드 방지를 위해 vm.swappiness=0 설정을 권장한다.
Key Points
- Linux 기본 메모리 오버커밋(0 또는 1) 시, 물리 메모리 부족 시 OOM Killer가 프로세스를 강제 종료하여 예외 처리 불가.
- DB 서버 등 데이터 무결성이 중요한 환경에서는 vm.overcommit_memory=2 설정 권장.
- vm.overcommit_memory=2 시, 메모리 부족 시 malloc이 NULL을 반환하여 애플리케이션에서 에러 처리 가능.
- DB 서버 운영 시 스왑 사용 비용 절감을 위해 vm.swappiness=0 설정 고려.
- vm.overcommit_ratio는 사용 가능 메모리 비율을 정의하며, overcommit_memory=2 시 CommitLimit 계산에 사용됨.