earlyoom - 조기 메모리 부족 데몬 치트시트
earlyoom - 조기 메모리 부족 데몬 치트시트
earlyoom은 고전적인 Linux “RAM이 부족하면 전체 시스템이 동결됨” 문제를 방지하는 경량 사용자 영역 데몬입니다. 메모리가 부족할 때, 커널 내 OOM 킬러는 종종 너무 늦게 반응하며, 이때 머신은 이미 스래싱으로 인해 반응하지 않습니다. earlyoom은 여유 RAM과 스왑을 모니터링하고, 구성 가능한 임계값 아래로 떨어지면 가장 큰 메모리 소비자를 조기에 종료 — 시스템을 행 상태 대신 대화형으로 유지합니다. 간단하고, 의존성이 없으며, 데스크톱과 서버에서 널리 사용됩니다.
설치
| 플랫폼 | 명령어 |
|---|---|
| Debian/Ubuntu | sudo apt install earlyoom |
| Fedora | sudo dnf install earlyoom (Fedora Workstation에서 기본) |
| Arch Linux | sudo pacman -S earlyoom |
| 소스에서 | 저장소에서 make && sudo make install |
| 확인 | earlyoom --version |
서비스 활성화
| 명령어 | 설명 |
|---|---|
sudo systemctl enable --now earlyoom | 데몬 활성화 및 시작 |
sudo systemctl status earlyoom | 실행 중인지 확인 |
journalctl -u earlyoom -f | 결정 실시간 감시 |
earlyoom | 포그라운드에서 실행 (테스트) |
결정 방식
earlyoom은 두 개의 숫자를 감시하고 둘 다 임계값 아래로 떨어지면 작동합니다:
| 메트릭 | 플래그 | 기본값-ish |
|---|---|---|
| 여유 RAM % | -m PERCENT | 예: 10% |
| 여유 스왑 % | -s PERCENT | 예: 10% |
| 킬 트리거 | 둘 다 임계값 아래 | — |
# RAM < 5% AND 스왑 < 5%일 때 종료
earlyoom -m 5 -s 5
주요 옵션
| 옵션 | 설명 |
|---|---|
-m PERCENT[,KILL] | RAM 임계값 경고/킬 (두 값 = warn,kill) |
-s PERCENT[,KILL] | 스왑 임계값 경고/킬 |
-M SIZE | 퍼센트 대신 KiB의 RAM 임계값 |
-r INTERVAL | 메모리 보고 간격 (초) |
-n | 킬 시 데스크톱 알림 활성화 |
-N COMMAND | 킬 시 명령어 실행 (예: 사용자 정의 경고) |
--prefer REGEX | 이름과 일치하는 프로세스 종료 선호 |
--avoid REGEX | 이름과 일치하는 프로세스 피하기 |
-p | earlyoom 자신에게 유리한 OOM 점수 부여 |
-d | 디버그 출력 활성화 |
프로세스 선호/회피
# 브라우저/컴파일러 종료 선호; 디스플레이 서버 및 sshd 보호
earlyoom -m 8 -s 8 \
--prefer '(^|/)(chrome|firefox|cc1plus|java)$' \
--avoid '(^|/)(Xorg|sshd|systemd)$'
| 지시문 | 효과 |
|---|---|
--prefer | 가능하면 먼저 이들 종료 |
--avoid | 마지막 수단으로만 이들 종료 |
이를 튜닝하면 폭주하는 프로세스가 세션이나 SSH 접근을 빼앗는 것을 방지합니다.
구성 파일
systemd 배포판에서 옵션은 보통 env 파일에 있습니다:
# /etc/default/earlyoom (Debian) 또는 단위의 EnvironmentFile
EARLYOOM_ARGS="-m 5 -s 5 -r 60 --avoid '(^|/)(sshd|Xorg)$'"
그 다음 sudo systemctl restart earlyoom.
earlyoom vs systemd-oomd vs 커널 OOM
| 측면 | earlyoom | systemd-oomd | 커널 OOM 킬러 |
|---|---|---|---|
| 계층 | 사용자 영역 데몬 | 사용자 영역 (systemd, PSI 기반) | 커널 |
| 트리거 | 여유 RAM/스왑 % | Pressure Stall Info (PSI) | 진정으로 메모리 부족 (늦음) |
| 세분성 | 프로세스 (가장 큼) | cgroup/단위 | 프로세스 |
| 구성 | 간단한 플래그 | systemd oomd 정책 | 제한됨 (oom_score_adj) |
| 최적 용도 | 간단하고 효과적인 안전망 | systemd 관리 cgroups | 최후의 수단 |
최신 systemd 배포판에서
systemd-oomd(PSI 기반)는 대체입니다. earlyoom은 단순성으로 인기를 유지하고 어디서나 작동합니다.
일반적인 워크플로우
# 데스크톱: UI 반응성 유지, 킬 시 알림, 세션 보호
earlyoom -m 8 -s 4 -n --avoid '(^|/)(Xorg|gnome-shell|sshd)$'
# 서버: 보수적 임계값, 모든 작업 로그
sudo systemctl enable --now earlyoom
journalctl -u earlyoom -f