--- title: strace — 개발 환경 및 프로그래밍 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: 프로세스의 시스템 콜·신호를 실시간 추적하는 도구. 파일 찾기 실패·권한 문제·네트워크 호출 진단에 사용. tags: 프로그램, 개발 환경 및 프로그래밍, strace --- 프로세스가 커널에 요청하는 시스템 콜과 신호를 실시간으로 보여 주는 추적 도구입니다. ## 기본 정보 | 프로그램 이름 | 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/ - [공식 문서 / 지식베이스](https://strace.io/documentation.html) — https://strace.io/documentation.html - [공식 다운로드](https://strace.io/files/) — https://strace.io/files/ - [릴리스 노트](https://github.com/strace/strace/blob/master/NEWS) — https://github.com/strace/strace/blob/master/NEWS - [소스 / 개발 자료](https://github.com/strace/strace) — https://github.com/strace/strace 버전·지원 환경 정보는 2026-10-18 기준으로 공식 사이트에서 확인한 값입니다. 설치 명령은 사용하는 배포판과 버전에 따라 달라질 수 있으므로 공식 설치 문서를 함께 확인하세요. ## 실제 실행 화면 strace로 파일 접근 시스템 콜만 추적한 결과를 서버 풍으로 재구성한 합성 예시입니다. 화면은 합성 예시이며 실제 실행 결과가 아닙니다. ![strace openat·stat 시스템 콜 추적 화면: /var/www/html 접근 시도와 반환값이 표시되는 터미널](https://games.cursorai.co.kr/assets/strace-demo.png) 실제 운영 중인 서버 --- 원문(HTML): https://games.cursorai.co.kr/programs/apps/dev/strace.html