USE 방법론 복습
Brendan Gregg의 USE: Utilization(사용률) / Saturation(포화도) / Errors(에러). 어떤 문제든 CPU·메모리·디스크·네트워크 4개 리소스에 이 3개 질문을 적용.
1. 시스템 개관
top / htop
htop # F6로 정렬, F5로 트리 뷰
uptime
uptime # load average 1/5/15분. CPU 수와 비교
dmesg
dmesg -T | tail -50 # OOM, 디스크 에러, 커널 경고
2. CPU
mpstat
mpstat -P ALL 1 # 코어별 사용률
pidstat
pidstat -u 1 # 프로세스별 CPU
pidstat -d 1 # IO
pidstat -t 1 -p PID # 스레드 분해
perf
perf top -p PID # 핫 함수 실시간
perf record -F 99 -p PID -g -- sleep 30
perf report # 콜스택 분석
perf stat -e cache-misses,branch-misses -p PID sleep 5
3. 메모리
free
free -h # available이 진실. free가 아닌
vmstat
vmstat 1 # si/so 스왑, us/sy/id CPU
smem
smem -tk --sort=pss # PSS 기준 실제 메모리
4. 디스크 / 파일시스템
iostat
iostat -xz 1 # %util 포화도, await 지연
iotop
iotop -oP # IO 일으키는 프로세스
lsof
lsof -p PID # 열려있는 파일
lsof /path/to/file # 이 파일 누가 열고 있나
lsof -i :8080 # 포트 사용자
fatrace / inotifywait
fatrace | grep -v "^containerd"
5. 네트워크
ss
ss -tlnp # 리스닝 TCP
ss -s # 요약
ss -ti # 커넥션별 RTT·cwnd
tcpdump
tcpdump -nn -i any 'port 443 and host 10.0.0.5'
bmon / nload
bmon # 인터페이스별 실시간 그래프
6. 추적 / 디버깅
strace
strace -fp PID -e trace=network,file -s 200
strace -c -p PID sleep 10 # syscall 통계
ltrace
ltrace -p PID # 라이브러리 호출
7. eBPF 세대 (최신)
bpftrace
# read() 실행 시간 분포
bpftrace -e 'kprobe:vfs_read { @start[tid] = nsecs; }
kretprobe:vfs_read /@start[tid]/ {
@ns = hist(nsecs - @start[tid]); delete(@start[tid]); }'
bcc 툴 모음
execsnoop # 새 프로세스
opensnoop # 파일 open
biosnoop # 디스크 IO 이벤트
tcpretrans # TCP 재전송
원인 추적 순서 (템플릿)
uptime→ 부하 수준vmstat 1,mpstat -P ALL 1→ CPU/메모리/스왑iostat -xz 1→ 디스크 포화ss -s,ss -ti→ 네트워크 포화/지연pidstat 1→ 원인 프로세스 특정perf/bpftrace→ 커널/함수 레벨
자주 묻는 질문
컨테이너 안에서 써도 되나?
top/ps는 호스트 네임스페이스. cgroup 기준 실제 사용량은 cat /sys/fs/cgroup/...를 참고. eBPF 도구는 권한 필요(privileged 또는 capabilities).
가장 먼저 배워야 할 3가지?
htop, iostat -xz 1, perf top. 이 셋이면 대부분의 "서버 느림" 1차 진단 가능.
댓글 0