일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- turtlesim
- 젯슨
- U-blox
- ubuntu
- 티스토리챌린지
- WSL2
- 인공지능
- ROS
- RTK
- 터틀심
- Puck LITE
- C++
- 자율주행
- 오블완
- 로봇
- Simulation
- WSL
- turtlebot3
- Visual SLAM
- DevOps
- ROS2
- GPS
- SLAM
- Gazebo
- 강화학습
- Jetson
- ZED2
- 자율탐사
- QT
- GUI
- Today
- Total
직관적인느낌
리눅스 컴파일 메모리 부족, 시스템 다운 완벽 해결 가이드 (ZRAM + 하이브리드 스왑) 본문
안녕하세요! 리눅스 환경, 특히 우분투(Ubuntu)에서 대규모 프로젝트를 컴파일하거나 여러 개의 도커 컨테이너, 가상 머신을 실행할 때 메모리 부족으로 시스템이 멈추거나 프로세스가 강제 종료되는 끔찍한 경험, 다들 한 번쯤 있으시죠?
저 또한 16GB RAM을 가진 최신 노트북에서 빌드 작업 중 계속해서 OOM Killer(Out-of-Memory Killer)가 동작하는 문제에 부딪혔습니다. 이 글은 수많은 시행착오 끝에 찾아낸, 속도와 안정성을 모두 잡는 '하이브리드 스왑' 시스템 구축의 모든 과정을 담은 최종 가이드입니다.
이 가이드만 따라오시면, 여러분의 리눅스 머신은 평소에는 RAM 기반의 초고속 ZRAM으로 날아다니고, 극한의 메모리를 요구하는 작업에서는 대용량 디스크 스왑이 안전망이 되어주는 무적의 시스템으로 거듭날 것입니다.
최종 목표 아키텍처
RAM 사용 → (부족하면) → 초고속 ZRAM 사용 → (그래도 부족하면) → 대용량 디스크 스왑 사용
1부: 과거와의 작별 - 기존 디스크 스왑(Swap) 완벽 제거
가장 먼저 시스템의 발목을 잡는 느린 디스크 스왑을 깨끗하게 정리합니다.
1. 스왑 비활성화 및 파일 삭제
# 1. 현재 활성화된 스왑 확인 (예: /swapfile)
swapon --show
# 2. 확인된 스왑 비활성화
sudo swapoff /swapfile
# 3. 스왑 파일 물리적 삭제
sudo rm /swapfile
2. 부팅 시 자동 스왑 방지 (fstab 정리)
재부팅 시 스왑이 다시 살아나지 않도록 설정 파일에서 해당 라인을 주석 처리(#)합니다.
sudo nano /etc/fstab
파일 내에서 /swapfile이 포함된 모든 줄을 찾아 맨 앞에 #을 붙여 비활성화합니다.
2부: 속도를 위한 핵심 무기, ZRAM 장착하기
디스크 대신 RAM을 압축하여 메모리처럼 사용하는 ZRAM을 설정합니다. 최신 우분투에서는 systemd-zram-generator를 사용하는 것이 가장 표준적이고 깔끔합니다.
1. systemd-zram-generator 설치
ZRAM을 자동으로 생성하고 관리해주는 프로그램을 설치합니다.
주의! 설정 파일만 만들고 이 패키지를 설치하지 않아 ZRAM이 생성되지 않는 경우가 매우 흔합니다.
sudo apt update
sudo apt install systemd-zram-generator
2. ZRAM 설정 파일 작성
사용자 설정 파일을 생성하여 ZRAM의 크기를 지정합니다. 16GB RAM 환경을 기준으로 8GB를 할당하는 예시입니다.
# 설정 파일 열기 (없으면 새로 생성됨)
sudo nano /etc/systemd/zram-generator.conf
파일 안에 다른 내용이 있다면 모두 지우고 아래 내용만 정확하게 입력하는 것이 혼동을 막는 가장 확실한 방법입니다.
[zram0]
# zram 크기를 8192MB (8GB)로 고정
zram-size = 8192
# 속도가 빠른 lz4 압축 알고리즘 사용
compression-algorithm = lz4
3. 재부팅 및 확인
설정을 적용하기 위해 시스템을 재부팅하고, zram이 잘 생성되었는지 확인합니다.
sudo reboot
# 재부팅 후 아래 명령어로 확인
swapon --show
결과로 8GB 크기의 /dev/zram0 장치가 보이면 성공입니다.
3부: 안정성의 완성, 하이브리드 스왑 구축
이제 빠른 ZRAM에 더해, 어떤 빌드 작업도 버텨낼 수 있는 거대한 디스크 기반 안전망을 추가할 차례입니다. **우선순위(priority)**를 이용하는 것이 핵심입니다.
1. 비상용 대용량 스왑 파일 생성 (32GB 예시)
빌드에 필요한 메모리가 40GB를 훌쩍 넘는 경우를 대비해 넉넉한 크기(예: 32GB)로 생성합니다. 디스크 용량을 확인하고 크기를 조절하세요.
# 1. 32GB 크기의 파일 생성 (이름은 swap_giant 등 구별되게)
sudo fallocate -l 32G /swap_giant
# 2. 보안을 위해 소유자만 접근 가능하도록 권한 변경
sudo chmod 600 /swap_giant
# 3. 파일을 스왑 공간으로 포맷
sudo mkswap /swap_giant
2. 낮은 우선순위로 스왑 파일 활성화
ZRAM의 우선순위(100)보다 훨씬 낮은 값(-10)을 부여하여, ZRAM이 가득 찼을 때만 사용되도록 설정합니다.
sudo swapon /swap_giant -p -10
3. 하이브리드 상태 최종 확인
swapon --show를 실행하여 두 개의 스왑이 우선순위에 따라 올바르게 표시되는지 확인합니다.
swapon --show
[최종 결과 예시]
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 8.0G 0B 100 <-- 높음 (먼저 사용됨)
/swap_giant file 32G 0B -10 <-- 낮음 (나중에 사용됨)
4. 영구 적용을 위한 fstab 설정
재부팅 후에도 이 비상용 스왑 파일이 낮은 우선순위로 자동 활성화되도록 /etc/fstab에 최종 등록합니다.
sudo nano /etc/fstab
파일 맨 아래에 다음 한 줄을 추가합니다.
/swap_giant none swap sw,pri=-10 0 0
부록: 필수 문제 해결(Troubleshooting) Q&A
이 설정을 진행하며 제가 직접 겪었던 문제들입니다. 아마 많은 분들이 비슷한 문제에 부딪힐 것입니다.
- Q1: ZRAM 크기가 8GB가 아닌 4GB로 설정돼요!
- A: /etc/systemd/zram-generator.conf 파일에 zram-fraction 이나 max-zram-size 같은 항목이 남아있는지 확인하세요. 이 항목들의 기본값 때문에 크기가 4GB로 제한될 수 있습니다. 파일 내용을 모두 지우고 zram-size = 8192 만 남기는 것이 가장 확실합니다.
- Q2: ZRAM을 설정했는데 재부팅하니 사라졌어요!
- A1: sudo apt install systemd-zram-generator 패키지를 설치했는지 확인하세요.
- A2: 이전에 사용하던 zram-tools 패키지가 설치되어 있다면 충돌을 일으킬 수 있습니다. sudo apt purge zram-tools로 삭제하세요.
- Q3: 하이브리드 스왑까지 만들었는데도 빌드 중 프로그램이 종료돼요!
- A1: 스왑 파일 크기를 더 늘려보세요. (예: 64GB)
- A2 (강력 추천): 빌드 시 사용하는 CPU 코어 수를 줄여보세요! make -j16 대신 make -j4 또는 make -j2를 사용하면 메모리 사용량이 극적으로 줄어들어 안정적으로 빌드를 마칠 수 있습니다.
- Q4: ZRAM을 잠시 또는 완전히 끄고 싶어요.
- A (일시정지): sudo swapoff /dev/zram0
- A (영구정지): sudo mv /etc/systemd/zram-generator.conf /etc/systemd/zram-generator.conf.disabled 실행 후 재부팅
'공학 > 시스템 설치 및 설정' 카테고리의 다른 글
Docker 컨테이너에서 설치한 패키지 및 라이브러리 – 자세한 정리 (0) | 2025.02.21 |
---|---|
Docker 명령어 정리 – 실전 가이드 (0) | 2025.02.20 |
Docker를 활용한 SLAMNAV2 환경 구축 및 이미지 관리 방법 (0) | 2025.02.20 |
DevOps 로드맵 (feat. DevOps 어떻게 시작할까?) - 1편 (0) | 2025.02.20 |
Conan 설치 가이드 (0) | 2025.02.19 |