여기서는 멈추세요
- 명령 출력의 서버·서비스·경로가 예상 대상과 다르면 변경 단계로 넘어가지 않습니다.
- 현재 접속 세션, 백업 또는 콘솔 복구 경로를 확보하지 못했다면 상태 변경 명령을 실행하지 않습니다.
MEMORY
SAFE OPERATING BOUNDARY
변경 전 설정과 출력값을 기록하고, 예상과 다른 결과가 나오면 추가 변경을 멈춘 뒤 승인된 운영 복구 절차로 되돌립니다.
BEFORE YOU START
CHECK THE BRANCH
커널 journal에 Killed process 기록이 있으면 호스트 OOM 흐름을 우선 확인합니다.
호스트에 여유가 있어도 cgroup의 memory.max 또는 Docker 메모리 제한에 도달하면 해당 작업만 종료될 수 있습니다.
한 시점의 RSS가 아니라 시간에 따른 증가, 재시작 후 회복 여부, 동일 요청에서의 반복 여부를 기록합니다.
FOLLOW THE FLOW
free의 free 열만 보지 말고 available과 Swap 사용량을 봅니다.
free -hswapon --showavailable이 지속적으로 낮고 Swap이 급증하면 메모리 압박 가능성이 큽니다.
다음 단계에서 점유 프로세스를 찾습니다.
RSS와 실행 시간을 함께 확인합니다.
ps -eo pid,ppid,user,%mem,rss,etime,comm --sort=-%mem | head -20vmstat 1 5특정 프로세스 RSS가 계속 증가하면 누수 가능성을 검토합니다.
프로세스와 서비스 이름을 기록합니다.
재부팅 전후 기록 범위를 구분합니다.
journalctl -k -g 'Out of memory|Killed process' --since today --no-pagerjournalctl -k -p warning -b --no-pagerKilled process의 PID·프로세스 이름과 당시 메모리 사용량을 확인합니다.
컨테이너라면 해당 컨테이너 제한도 확인합니다.
systemd unit에 설정된 메모리 제한을 확인합니다.
systemctl show SERVICE_NAME -p MemoryCurrent -p MemoryMax -p MemoryHighjournalctl -u SERVICE_NAME --since '-1 hour' --no-pagerMemoryMax가 예상보다 작거나 재시작 루프가 있는지 봅니다.
설정 변경 전에 애플리케이션의 정상 요구량을 산정합니다.
Swap 추가나 MemoryMax 변경은 성능과 장애 양상을 바꾸므로 별도 변경 계획으로 진행합니다.
sudo systemctl restart SERVICE_NAMEfree -h && systemctl is-active SERVICE_NAMEavailable 메모리가 회복되고 OOM 로그가 다시 생성되지 않아야 합니다.
재발 시 누수 분석 또는 용량 증설이 필요합니다.
PRIMARY REFERENCES
배포판과 버전에 따라 옵션·로그 위치가 다를 수 있습니다. 실행 전 서버의 --help와 로컬 매뉴얼을 함께 확인하세요.