핵심 요약
- 기본 1GB 램 환경에서도 버겁던 NixOS를 커널 및 데몬 최적화를 통해 아이들 96MB 수준으로 대폭 감량했습니다.
- THP 비활성화, 불필요한 가상화 하드웨어 모듈 제거, systemd 데몬 경량화, zram 튜닝을 통해 512MB RAM VPS에서도 OOM 없는 빌드를 달성했습니다.
- 반나절 일정으로 시작했으나 꼬박 3일이 걸린 끝에 완성된 실전 저사양 튜닝 기록입니다.
요약 한 인프라 관리자가 저가형 512MB VPS 환경에서 NixOS를 쾌적하게 구동하기 위해 진행한 극단적인 메모리 다이어트 과정이 화제를 모으고 있습니다. 당초 반나절 정도면 끝날 것으로 예상했던 작업은 예상치 못한 디버깅과 최적화를 거치며 꼬박 3일이 걸려 완성되었습니다.
기본 순정 상태의 NixOS는 1024MB RAM에서도 약 288MB의 메모리를 사용하고 89개의 커널 모듈을 로드하며, 빌드를 다시 수행하려면 최소 896MB 이상이 필요했습니다(768MB 환경에서는 OOM 에러로 프로세스가 강제 종료됨). 이를 개선하기 위해 글쓴이는 커널 커맨드라인 파라미터부터 systemd 데몬까지 운영체제 전반을 대수술했습니다.
우선 불필요한 메모리 프로파일링(`sysctl.vm.mem_profiling=never`)과 KFENCE 풀을 비활성화하고, 가상머신에 불필요한 TPM 및 KSM 관련 초기화 루틴을 블랙리스트 처리했습니다. 가장 큰 메모리 절감 효과를 낸 것은 투명한 거대 페이지(Transparent Huge Pages, THP)를 끈 조치로, 이를 통해 예약 메모리를 회수하며 수십 MB의 가용 공간을 확보했습니다. 여기에 플로피 드라이브, 마우스, 사운드, 와이파이 등 클라우드 게스트 머신에 절대 쓰이지 않을 하드웨어 드라이버를 모듈 트리에서 대거 잘라냈습니다.
사용자 공간(유저랜드)에서는 상주 메모리를 차지하던 `systemd-resolved`를 끄고 cloud-init 기반의 정적 resolv.conf로 대체했으며, 시간 동기화 데몬 역시 상주하지 않는 busybox 단발성 ntp 타이머로 바꿨습니다. SSH 서비스 또한 평소에는 꺼져 있다가 접속 시에만 소켓으로 활성화되도록 구성했습니다. 마지막으로 zstd 기반의 zram 스왑과 적극적인 swappiness 설정을 적용하여, 512MB 램 환경에서도 OOM 없이 커널 업그레이드와 재빌드가 최대 피크 371MB 선에서 무사히 완주하도록 만들었습니다.
Sponsored · 광고