strace 기본 사용법
sudo apt install -y strace # Ubuntu / Debian
# 프로그램 실행하며 추적
strace ls /tmp
# 실행 중인 프로세스 추적 (PID)
sudo strace -p 1234
# 자식 프로세스도 추적
sudo strace -f -p 1234
# 시스템 콜 통계 요약 (-c)
strace -c ls /tmp
# 특정 시스템 콜만 추적
strace -e trace=open,read,write ls /tmp
# 타임스탬프 출력
strace -t ls /tmp # 절대 시간
strace -r ls /tmp # 상대 시간 (콜 간 간격)파일 접근 추적
어떤 파일을 열고 읽는지 확인할 때 가장 많이 사용합니다.
# 열리는 파일 추적
strace -e trace=openat,open,read,write,close ls /tmp 2>&1 | grep open
# 실용적인 패턴: 설정 파일 위치 찾기
strace -e trace=openat nginx 2>&1 | grep ".conf"
# 어떤 파일을 읽는지 확인
strace -e trace=openat python3 myapp.py 2>&1 | grep -v "No such file"
# 파일 출력을 별도 파일로
strace -o trace.log -p 1234네트워크 소켓 추적
# 네트워크 관련 콜만
strace -e trace=network curl https://example.com
# connect 실패 원인 확인
strace -e trace=connect,socket myapp 2>&1 | grep -E "connect|ECONNREFUSED|ETIMEDOUT"
# 수신 데이터 크기 확인
strace -e trace=read,write -s 1024 curl https://example.com 2>&1 | grep "read("통계로 병목 찾기
# 시스템 콜별 호출 횟수·시간 통계
strace -c -p 1234
# 예시 출력
# % time seconds usecs/call calls errors syscall
# ------- ----------- ---------- -------- -------- -------
# 45.23 0.002345 12 195 read
# 32.11 0.001667 8 208 write
# 12.05 0.000625 6 104 42 openat ← 오류 많음
# 느린 시스템 콜 찾기
strace -T -p 1234 2>&1 | awk -F'<' '{if($2+0 > 0.01) print}' | head -20실전 진단 패턴
# 프로그램이 갑자기 종료될 때 — 시그널 확인
strace -e trace=signal -p 1234
# Permission denied 원인 찾기
strace -e trace=openat,access myapp 2>&1 | grep "EACCES|EPERM"
# 데드락 의심 — 차단된 시스템 콜 확인
sudo strace -p 1234 # 멈춰있으면 어느 콜에서 블로킹인지 표시
# execve로 어떤 프로그램을 실행하는지 추적
strace -e trace=execve -f bash myscript.sh 2>&1 | grep execveltrace — 라이브러리 함수 추적
sudo apt install -y ltrace
# 라이브러리 콜 추적
ltrace ls /tmp
# 특정 함수만
ltrace -e malloc,free myapp
# 통계 요약
ltrace -c myapp
# strace와 함께 (시스템 콜 + 라이브러리 콜)
ltrace -S myapp 2>&1 | head -50strace vs ltrace vs perf 선택 기준
| 도구 | 용도 |
|---|---|
| strace | 파일·네트워크·프로세스 관련 커널 인터페이스 문제 |
| ltrace | 공유 라이브러리 함수 호출 패턴 (malloc 누수 등) |
| perf | CPU 병목, 핫스팟 찾기, 성능 카운터 |
자주 묻는 질문 (FAQ)
Q. strace와 ltrace, 언제 뭘 쓰나요?
A. strace는 시스템 콜(open·read·connect 등 커널 경계)을 추적해 '파일·네트워크·권한' 문제 진단에 쓰고, ltrace는 라이브러리 콜(malloc·printf 등)을 추적해 '어떤 함수에서 멈추나'를 봅니다. 파일을 못 여는 문제는 strace, 특정 라이브러리 동작 추적은 ltrace입니다. 둘 다 필요하면 strace -f로 자식 프로세스까지 따라가며 시작하세요.
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.