CPU·메모리 누수 판별 · 메모리를 읽는다 · 실습
느리다는 신고를 쪼갠다
목표
"서버가 느려요" 를 CPU · 메모리 · I/O 중 무엇인지로 쪼갭니다. 숫자를 직접
읽고, 누수인지 캐시인지를 기울기로 가릅니다.
왜 중요한가
느리다는 신고에 대한 가장 흔한 대응은 "사양을 올리자" 입니다. 그런데 D 상태
프로세스가 20개라 load 가 20인 기계에 CPU 를 늘리면 아무 일도 일어나지 않습니다.
증상과 원인을 잇는 숫자를 찾는 것이 이 실습의 전부입니다.
이 환경의 제약이 곧 훈련이다
이 파드는 커널 권한이 전부 제거돼 있어 perf·strace·bpftrace 를 쓸 수
없습니다. 대신 /proc 과 /sys/fs/cgroup 을 직접 읽습니다. 그건 저 도구들이
안에서 하는 일이고, **도구를 설치할 수 없는 고객사 서버에서 실제로 하게 되는
일**이기도 합니다.
단계
1. 60초 분류 → /root/perf/01-triage.txt
2. /proc/stat 두 번 읽어 CPU 사용률 계산 → /root/perf/02-cpu.txt
3. CPU 1위 프로세스 → /root/perf/03-top.txt
4. RSS·PSS·Private_Dirty → /root/perf/04-mem.txt
5. 누수를 만들어 기울기로 확인 → /root/perf/05-slope.txt
6. cgroup 한도 → /root/perf/06-cgroup.txt
7. anon 과 file 분리 → /root/perf/07-split.txt
8. 결론 세 줄 → /root/perf/08-verdict.md
참고
top의 %CPU 가 100 을 넘어도 정상입니다 — 코어 하나 기준이라서입니다.free에서 볼 값은free가 아니라available입니다.- 여러 프로세스의 메모리를 합칠 때는 RSS 가 아니라 PSS 를 씁니다.
단계 8개
- 60초 분류
- CPU 사용률을 손으로 계산한다
- 누가 CPU 를 쓰는지 찾는다
- RSS·PSS·Private_Dirty 를 구분한다
- 누수를 만들어 기울기로 잡는다
- 컨테이너의 진짜 한도를 본다
- 힙인가 캐시인가
- 결론을 세 줄로