EVIDENCE LOOP

관측 결과는 도구 이름보다 에러 코드와 숫자로 읽는다

같은 장애라도 시스템 콜 실패, 프로세스 상태, 커널 이벤트, 콜 스택, CPU 샘플 중 어떤 증거가 나왔는지에 따라 다음 액션이 달라진다.

strace

실패한 시스템 콜을 먼저 찾는다

파일 경로, 네트워크 주소, 권한 오류처럼 프로그램 바깥 경계에서 막힌 지점을 본다.

open(...) = -1 ENOENT
/proc

살아 있는 프로세스의 현재 상태를 읽는다

`status`, `fd`, `maps`, `io`로 스레드, 열린 파일, 메모리 레이아웃을 분리한다.

VmRSS, Threads, fd/3
dmesg

커널이 남긴 사건을 확인한다

OOM Killer, I/O error, 드라이버 경고는 애플리케이션 로그에 없을 수 있다.

Out of memory: Kill process
gdb

죽은 순간의 콜 스택을 따라간다

코어 덤프의 `bt`, `frame`, `print`로 NULL 포인터나 잘못된 인자를 좁힌다.

process_request(req=0x0)
perf

느린 함수의 비중을 숫자로 본다

`perf report`에서 넓게 잡히는 함수가 최적화 후보가 된다.

hash_lookup 45.23%
재현 같은 입력과 환경에서 다시 관측할 수 있어야 도구 결과를 비교할 수 있다.
대조 strace와 journalctl, /proc와 perf처럼 서로 다른 층의 증거를 맞춰 본다.
수정 후 재측정 경로 수정, 설정 변경, 코드 패치 뒤 같은 명령으로 지표가 달라졌는지 확인한다.