/엔지니어/Linux / Shell/strace · ltrace 실전 — 시스템 콜과
Linux / Shell중급UbuntuDebianCentOSstraceltrace디버깅

strace · ltrace 실전 — 시스템 콜과 라이브러리 콜 추적

strace로 프로세스의 시스템 콜을 추적해 파일·네트워크·신호 관련 문제를 진단하고, ltrace로 라이브러리 함수 호출을 분석하는 방법을 설명합니다.

strace 기본 사용법

Bash
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              # 상대 시간 (콜 간 간격)

파일 접근 추적

어떤 파일을 열고 읽는지 확인할 때 가장 많이 사용합니다.

Bash
# 열리는 파일 추적
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

네트워크 소켓 추적

Bash
# 네트워크 관련 콜만
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("

통계로 병목 찾기

Bash
# 시스템 콜별 호출 횟수·시간 통계
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

실전 진단 패턴

Bash
# 프로그램이 갑자기 종료될 때 — 시그널 확인
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 execve

ltrace — 라이브러리 함수 추적

Bash
sudo apt install -y ltrace

# 라이브러리 콜 추적
ltrace ls /tmp

# 특정 함수만
ltrace -e malloc,free myapp

# 통계 요약
ltrace -c myapp

# strace와 함께 (시스템 콜 + 라이브러리 콜)
ltrace -S myapp 2>&1 | head -50

strace vs ltrace vs perf 선택 기준

도구용도
strace파일·네트워크·프로세스 관련 커널 인터페이스 문제
ltrace공유 라이브러리 함수 호출 패턴 (malloc 누수 등)
perfCPU 병목, 핫스팟 찾기, 성능 카운터

자주 묻는 질문 (FAQ)

Q. strace와 ltrace, 언제 뭘 쓰나요? A. strace는 시스템 콜(open·read·connect 등 커널 경계)을 추적해 '파일·네트워크·권한' 문제 진단에 쓰고, ltrace는 라이브러리 콜(malloc·printf 등)을 추적해 '어떤 함수에서 멈추나'를 봅니다. 파일을 못 여는 문제는 strace, 특정 라이브러리 동작 추적은 ltrace입니다. 둘 다 필요하면 strace -f로 자식 프로세스까지 따라가며 시작하세요.

#strace#ltrace#디버깅#시스템콜#linux#트러블슈팅
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서GNU/Linux man 페이지

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.