콘텐츠로 이동

earlyoom - 조기 메모리 부족 데몬 치트시트

earlyoom - 조기 메모리 부족 데몬 치트시트

earlyoom은 고전적인 Linux “RAM이 부족하면 전체 시스템이 동결됨” 문제를 방지하는 경량 사용자 영역 데몬입니다. 메모리가 부족할 때, 커널 내 OOM 킬러는 종종 너무 늦게 반응하며, 이때 머신은 이미 스래싱으로 인해 반응하지 않습니다. earlyoom은 여유 RAM과 스왑을 모니터링하고, 구성 가능한 임계값 아래로 떨어지면 가장 큰 메모리 소비자를 조기에 종료 — 시스템을 행 상태 대신 대화형으로 유지합니다. 간단하고, 의존성이 없으며, 데스크톱과 서버에서 널리 사용됩니다.

설치

플랫폼명령어
Debian/Ubuntusudo apt install earlyoom
Fedorasudo dnf install earlyoom (Fedora Workstation에서 기본)
Arch Linuxsudo 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이름과 일치하는 프로세스 피하기
-pearlyoom 자신에게 유리한 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

측면earlyoomsystemd-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

자료