strace — 개발 환경 및 프로그래밍
최신 도구 가이드 / 개발 환경 및 프로그래밍 / strace.html
프로세스가 커널에 요청하는 시스템 콜과 신호를 실시간으로 보여 주는 추적 도구입니다.
기본 정보
| 프로그램 이름 | strace (스트레이스) |
|---|---|
| 한 줄 소개 | 프로세스가 커널에 요청하는 시스템 콜과 신호를 실시간으로 보여 주는 추적 도구입니다. |
| 개발·유지 | strace project (Dmitry V. Levin 외) |
| 공식 홈페이지 | https://strace.io/ |
| 공식 문서 | https://strace.io/documentation.html |
| 공식 다운로드 | https://strace.io/files/ |
| 지원 운영체제 | Linux, FreeBSD, macOS(제한적), Solaris |
| 라이선스 | LGPL-2.1-or-later |
| 안정 버전 | 7.2 (2026-08-18 공개) — 확인일 2026-10-18 |
| GitHub 저장소 | https://github.com/strace/strace |
| 분류 | 개발 환경 및 프로그래밍 (태그: 시스템 콜 추적, 장애 진단, 파일 접근 추적) |
이 프로그램은 무엇인가?
strace는 실행 중인 프로세스가 커널에 요청하는 모든 시스템 콜(open, read, connect, stat 등)과 수신하는 신호를 화면에 실시간으로 찍어 주는 도구입니다.
프로그램이 '파일을 못 찾는다'거나 '권한이 거부된다'고 할 때, 실제로 어떤 경로·어떤 권한으로 접근을 시도하는지 눈으로 확인할 수 있습니다. 서버 장애 진단에서 '왜 안 되는가'를 가장 빠르게 확인하는 수단 중 하나입니다.
어떤 문제를 해결하는가?
- 프로그램이 파일·설정을 못 찾아 실패할 때 어떤 경로를 시도하는지 확인해야 할 때.
- 권한 오류(Permission denied)가 어디서 발생하는지 원인을 좁혀야 할 때.
- 네트워크 프로그램이 어떤 호스트·포트에 연결을 시도하는지 확인해야 할 때.
- 프로그램 시작이 비정상적으로 느릴 때 어떤 I/O·네트워크 호출이 병목인지 봐야 할 때.
주요 기능
시스템 콜 추적
지정 프로세스의 시스템 콜을 인자·반환값과 함께 출력합니다.
- 활용 상황: 장애 재현 명령 앞에 strace를 붙입니다.
- 얻는 결과: 실패한 호출(예: ENOENT, EACCES)을 반환값까지 확인합니다.
- 제한 사항: 호출이 매우 많아 출력이 방대해질 수 있습니다.
통계 요약 (-c)
시스템 콜별 호출 횟수·소요 시간을 요약합니다.
- 활용 상황: 느린 프로세스의 병목 호출을 찾습니다.
- 얻는 결과: 어떤 콜이 시간을 많이 쓰는지 표로 얻습니다.
- 제한 사항: 개별 인자 상세는 사라지므로 원인 분석에는 부족합니다.
자식 프로세스 추적 (-f)
fork·exec로 만들어진 모든 자식 프로세스를 함께 추적합니다.
- 활용 상황: 멀티 프로세스 서버의 시작 과정을 봅니다.
- 얻는 결과: 부모·자식 전체의 호출 흐름을 얻습니다.
- 제한 사항: 추적 대상이 많아지면 부하·출력량이 급증합니다.
파일·네트워크 필터
추적 대상 시스템 콜이나 경로를 필터링합니다.
- 활용 상황: open 계열 콜만, 또는 특정 경로만 봅니다.
- 얻는 결과: 관심 있는 호출만 골라 봅니다.
- 제한 사항: 필터 문법을 잘못 쓰면 필요한 호출이 빠질 수 있습니다.
설치 및 실행
Ubuntu / Debian
배포판 저장소에서 설치합니다.
sudo apt update
sudo apt install strace
RHEL / CentOS / Fedora
기본 저장소에서 설치합니다.
sudo dnf install strace
소스 빌드
공식 배포 페이지의 소스 tarball을 받아 빌드합니다.
# https://strace.io/files/
실제 사용 예제
명령 앞에 붙여 추적
원래 명령 앞에 strace를 붙이면 됩니다.
strace ls /var/www/html
자식까지 추적
-f로 자식 프로세스까지 추적합니다.
strace -f -e trace=openat,connect ./app-server --once
요약 통계 (예시)
-c로 콜별 통계를 뽑습니다. 출력은 예시입니다.
strace -c ls /etc
장점과 한계
장점
- 소스·재빌드 없이 기존 바이너리의 실제 커널 상호작용을 볼 수 있습니다.
- 파일·권한·네트워크 문제 진단에서 가장 직접적인 증거를 제공합니다.
- 대부분의 Linux에 기본 포함되어 있고 사용법이 단순합니다.
- LGPL 라이선스로 자유롭게 사용할 수 있습니다.
사용 전에 고려할 점
- 추적 중에는 프로세스가 크게 느려져 장시간 운영 프로세스에 그대로 쓰면 안 됩니다.
- 출력량이 폭증할 수 있어 필터·요약 옵션 사용이 필수적입니다.
- 커널 버전과 시스템 콜 목록이 맞지 않으면 일부 콜 이름이 표시되지 않을 수 있습니다.
- 스레드·비동기 I/O가 많은 프로그램은 해석이 어렵습니다.
비슷한 프로그램과 비교
| 프로그램 | 특징 | 이런 경우에 적합 |
|---|---|---|
| ltrace | 라이브러리 함수 호출(라이브러리 레벨)을 추적합니다. | 커널 콜이 아닌 사용자 라이브러리 호출을 볼 때. |
| perf | CPU·이벤트 기반 프로파일링으로 병목을 측정합니다. | 성능 병목을 정량적으로 측정할 때. |
| eBPF/bpftrace | 커널에 계측을 심어 저부하로 원하는 이벤트만 수집합니다. | 운영 서버에서 장기·저부하 관측이 필요할 때. |
공식 자료 및 추가 학습
- 공식 홈페이지 — https://strace.io/
- 공식 문서 / 지식베이스 — https://strace.io/documentation.html
- 공식 다운로드 — https://strace.io/files/
- 릴리스 노트 — https://github.com/strace/strace/blob/master/NEWS
- 소스 / 개발 자료 — https://github.com/strace/strace
버전·지원 환경 정보는 2026-10-18 기준으로 공식 사이트에서 확인한 값입니다. 설치 명령은 사용하는 배포판과 버전에 따라 달라질 수 있으므로 공식 설치 문서를 함께 확인하세요.
실제 실행 화면
strace로 파일 접근 시스템 콜만 추적한 결과를 서버 풍으로 재구성한 합성 예시입니다. 화면은 합성 예시이며 실제 실행 결과가 아닙니다.

실제 운영 중인 서버
이 문서는 화면 표시용 가상 디렉터리의 항목입니다. 실제 서버 파일시스템과 연결되지 않으며, 파일 실행이나 시스템 명령을 수행하지 않습니다.