LabHub

리눅스 장애 대응 · 메모리와 OOM · 실습

메모리와 OOM 진단

LabHub 에서 이어서 보기

목표

메모리 지표를 정확히 읽고, 프로세스가 실제로 붙잡은 메모리와 예약만 한 주소 공간을 구분하고, OOM Killer 가 무엇을 보고 고르는지 확인합니다.

왜 중요한가

메모리 문제의 오진 대부분은 잘못된 열을 보는 것에서 시작합니다. free 의 free 열이 아니라 available 열을 봐야 하고, top 의 VIRT 가 아니라 RES(RSS)를 봐야 합니다. OOM Killer 의 점수도 RSS 기준입니다 - 64GB 를 mmap 으로 예약만 한 프로세스는 후보조차 아닙니다. 그리고 컨테이너 안에서 free 는 호스트 전체를 보여 주므로, 진짜 상한은 cgroup 파일에서 읽어야 합니다. 이 실습의 7번이 "없으면 없다고 적어라"까지 채점하는 이유는, 현장에서도 그 파일이 있는지부터 확인하는 것이 첫 동작이기 때문입니다.

단계

/root/mem 디렉터리에서 작업합니다.

1. /proc/meminfoMemTotal 값을 kB 숫자만 /root/mem/total_kb.txt 에 적으세요.
2. MemAvailable 값을 kB 숫자만 /root/mem/available_kb.txt 에 적으세요.
3. 실제 상주 메모리(VmRSS)가 100MB 이상인 프로세스를 백그라운드로 띄우고 PID 를 /root/mem/hog_pid.txt 에 적으세요. 이후 단계 내내 살아 있어야 합니다.
4. 그 프로세스의 VmSizeVmRSS/root/mem/vm.txt 에 다음 두 줄로 적으세요.

참고

단계 8개

  1. 전체 메모리 읽기
  2. MemAvailable 과 MemFree 구분하기
  3. 메모리를 실제로 붙잡기
  4. VmSize 와 VmRSS 비교
  5. OOM 점수 조정하기
  6. RSS 상위 프로세스 뽑기
  7. 컨테이너의 진짜 한도 찾기
  8. 메모리 감시 스크립트