반응형
strace는 리눅스 환경에서 **시스템 호출(system calls)**과 **신호(signals)**를 추적하기 위한 디버깅 도구입니다. 주로 프로세스의 동작을 분석하거나 디버깅할 때 사용됩니다.
1. strace란?
- System Trace의 줄임말로, 실행 중인 프로세스가 커널과 상호작용하는 방식을 추적합니다.
- 프로그램이 실행 중에 호출하는 **시스템 호출(syscall)**과 **받는 신호(signals)**를 기록하고 출력합니다.
2. strace의 주요 기능
- 시스템 호출 추적
- 파일 읽기/쓰기, 네트워크 요청, 메모리 할당 등 프로세스가 호출하는 모든 시스템 호출을 추적할 수 있습니다.
- 예: open, read, write, socket, mmap 등.
- 프로세스 디버깅
- 프로세스가 비정상적으로 작동하거나 멈췄을 때, 어떤 시스템 호출에서 문제가 발생했는지 확인할 수 있습니다.
- 신호 처리 추적
- 프로세스가 수신하거나 처리하는 신호(SIGKILL, SIGSEGV 등)를 확인할 수 있습니다.
- 성능 및 동작 분석
- 프로그램이 의도한 대로 시스템 자원을 사용하는지 확인할 수 있습니다.
- 병목현상이나 비효율적인 동작의 원인을 찾는 데 유용합니다.
3. strace의 주요 사용 사례
- 파일 입출력 분석
- 어떤 파일을 열거나 읽는지, 또는 파일 접근이 실패했는지 확인.
- 네트워크 호출 확인
- 네트워크 소켓을 열거나 데이터를 전송하는지 추적.
- 프로세스 중단 원인 조사
- 특정 시스템 호출에서 멈추거나 오류가 발생하는지 확인.
- 동적 라이브러리 문제 해결
- 실행 파일이 의존하는 동적 라이브러리가 제대로 로드되는지 확인.
- 권한 문제 해결
- 프로세스가 필요한 파일이나 디렉토리에 접근할 수 없는 경우 문제를 파악.
4. strace 명령어 사용법
기본 구문은 다음과 같습니다:
strace [옵션] <명령어> [명령어의 인자]
4.1 기본 사용
strace ls
- ls 명령어가 실행되면서 호출하는 모든 시스템 호출을 출력.
4.2 특정 시스템 호출만 추적
strace -e trace=open,read,write ls
- open, read, write와 관련된 시스템 호출만 출력.
4.3 프로세스 ID를 지정하여 추적
strace -p <PID>
- 이미 실행 중인 프로세스(PID)를 추적.
4.4 출력을 파일로 저장
strace -o output.txt ls
- 결과를 output.txt 파일에 저장.
4.5 시간 측정
strace -T ls
- 각 시스템 호출이 실행되는 데 걸린 시간을 출력.
4.6 신호 추적
strace -e signal ls
- 프로세스가 받는 신호를 추적.
4.7 시스템 호출 실패만 출력
strace -e fault ls
- 실패한 시스템 호출만 표시.
5. strace 출력 해석
출력 형식은 일반적으로 다음과 같습니다:
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0"..., 832) = 832 close(3) = 0
- openat: 호출된 시스템 호출 이름.
- (AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC): 시스템 호출의 인자.
- 여기서 /etc/ld.so.cache는 열려는 파일.
- = 3: 시스템 호출의 반환 값. 파일 디스크립터 3을 반환.
- read: 파일 디스크립터 3에서 데이터를 읽음.
- close(3): 파일 디스크립터 3을 닫음.
6. 주의사항
- 오버헤드 발생
- strace는 모든 시스템 호출을 기록하므로 성능에 영향을 줄 수 있습니다.
대규모 프로그램에서 사용 시 주의해야 합니다.
- strace는 모든 시스템 호출을 기록하므로 성능에 영향을 줄 수 있습니다.
- 출력량이 많음
- 시스템 호출 로그가 방대할 수 있으므로, 특정 호출만 필터링하거나 출력을 파일에 저장하는 것이 좋습니다.
- 루트 권한 필요
- 다른 사용자의 프로세스를 추적하려면 루트 권한이 필요합니다.
7. 비슷한 도구
- ltrace: 시스템 호출 대신 라이브러리 호출을 추적.
- gdb: 디버거로, 프로세스를 중단하고 내부 상태를 조사.
- perf: 성능 분석 도구.
8. 예제
파일 접근 문제 디버깅:
strace -e trace=open ls /nonexistentfile
출력 예:
openat(AT_FDCWD, "/nonexistentfile", O_RDONLY) = -1 ENOENT (No such file or directory)
- ENOENT 오류를 통해 파일이 없음을 확인.
요약
- strace는 리눅스에서 시스템 호출과 신호를 추적하는 강력한 디버깅 도구입니다.
- 디버깅, 성능 분석, 파일/네트워크 문제 해결에 유용합니다.
- 사용법은 간단하지만, 출력 해석과 필터링을 적절히 활용해야 효율적으로 사용할 수 있습니다.
반응형
'LINUX' 카테고리의 다른 글
Sticky bit를 사용하는 이유가 뭘까? (0) | 2024.12.21 |
---|---|
[Ubuntu] sudo 권한을 관리하는 파일 /etc/sudoers (0) | 2024.12.07 |
Ubuntu 22.04 고정 ip 설정하기 (0) | 2024.12.07 |
btmp, wtmp, lastlog 의 파일의 권한이 변경되지 않는 이유 (0) | 2024.12.05 |
btmp, wtmp 란? (0) | 2024.12.05 |
댓글