리눅스에서 strace 명령어는 프로세스가 호출하는 시스템 콜과 신호를 추적하는 강력한 도구입니다. strace를 사용하면 프로그램이 커널과 어떻게 상호작용하는지를 실시간으로 분석할 수 있습니다. 특히, 디버깅이나 성능 분석, 특정 오류의 원인을 파악할 때 매우 유용합니다. 예를 들어, 프로그램이 예상대로 실행되지 않거나 파일 입출력 문제를 일으킬 때 strace를 통해 시스템 콜을 추적하면 원인을 찾을 수 있습니다.
strace 기본 사용법
strace [옵션] [프로그램]
strace는 프로그램 실행과 동시에 해당 프로그램이 호출하는 시스템 콜을 실시간으로 출력해 줍니다. 예를 들어, ls 명령어의 시스템 콜을 추적하려면 다음과 같이 실행할 수 있습니다.
user@linux:~$ strace ls
execve("/bin/ls", ["ls"], 0x7ffc8d2a6d80 /* 59 vars */) = 0
brk(NULL) = 0x558c1fddf000
arch_prctl(ARCH_SET_FS, 0x7f0e63e34b40) = 0
openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
...
이와 같이 strace는 ls 명령어가 실행되면서 호출하는 시스템 콜을 한 줄씩 출력합니다. 여기서 openat()은 파일을 여는 시스템 콜이고, "."은 현재 디렉토리입니다.
특정 PID를 추적하는 방법
이미 실행 중인 프로세스를 추적하려면 -p 옵션을 사용하여 프로세스 ID (PID)를 지정할 수 있습니다. 예를 들어, PID가 1234인 프로세스를 추적하려면 다음과 같이 입력합니다.
user@linux:~$ strace -p 1234
strace: Process 1234 attached
recvfrom(3, "HTTP/1.1 200 OK\r\n", 4096, 0, NULL, NULL) = 17
...
이 명령어는 PID 1234 프로세스가 호출하는 시스템 콜을 추적하고 그 결과를 실시간으로 출력합니다.
strace 주요 옵션
- -p [PID]: 특정 프로세스를 추적
- -o [파일명]: 결과를 파일로 저장
- -c: 시스템 콜 통계 출력
- -e [표현식]: 특정 시스템 콜만 필터링하여 추적
시스템 콜 필터링
-e 옵션을 사용하면 특정 시스템 콜만 필터링할 수 있습니다. 예를 들어, 파일 열기와 관련된 시스템 콜만 추적하려면 open과 관련된 콜만 필터링할 수 있습니다.
user@linux:~$ strace -e open,openat ls
openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
...
이 예제에서는 open과 openat 시스템 콜만 출력됩니다. 이 방법을 통해 많은 양의 출력 중에서 필요한 정보를 빠르게 찾을 수 있습니다.
결과를 파일로 저장
출력 결과를 화면에 표시하는 대신 파일로 저장하고 싶을 때는 -o 옵션을 사용합니다. 예를 들어, strace 결과를 trace.log 파일에 저장하려면 다음과 같이 입력합니다.
user@linux:~$ strace -o trace.log ls
strace 실행 예제
다음은 strace를 사용하여 ls 명령어의 시스템 콜을 추적하는 예제입니다.
user@linux:~/projects$ strace ls
execve("/bin/ls", ["ls"], 0x7ffc8d2a6d80 /* 59 vars */) = 0
brk(NULL) = 0x558c1fddf000
arch_prctl(ARCH_SET_FS, 0x7f0e63e34b40) = 0
openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
getdents64(3, /* 22 entries */, 32768) = 488
close(3) = 0
munmap(0x7f0e64085000, 32768) = 0
...
이 명령어는 ls가 실행되면서 호출하는 시스템 콜의 전체 흐름을 보여줍니다. 이를 통해 프로그램이 어떤 파일을 열고, 읽고, 닫는지와 같은 중요한 정보를 얻을 수 있습니다.
strace 사용 시 유용한 팁
- 디버깅: 프로그램이 제대로 작동하지 않을 때 strace로 시스템 콜을 분석하여 문제를 찾을 수 있습니다.
- 성능 분석: 프로그램이 느리게 실행되는 원인을 시스템 콜을 통해 분석할 수 있습니다.
- 파일 입출력 분석: 프로그램이 어떤 파일을 열고 닫는지 추적하여 파일 입출력 문제를 해결할 수 있습니다.
참고사이트
'Linux' 카테고리의 다른 글
[리눅스] sar 명령어 완벽 가이드 사용법(시스템 성능 기록 및 분석) (0) | 2024.10.20 |
---|---|
[리눅스] vmstat 명령어 완벽 가이드 사용법(시스템 성능 통계 확인) (0) | 2024.10.19 |
[리눅스] iptables 명령어 완벽 가이드 사용법(방화벽 설정) (0) | 2024.10.19 |
[리눅스] netcat 명령어 완벽 가이드 사용법(네트워크 디버깅) (0) | 2024.10.19 |
[리눅스] nohup 명령어 완벽 가이드 사용법(백그라운드 실행) (1) | 2024.10.19 |
[리눅스] nice, renice 명령어 완벽 가이드 사용법(프로세스 우선순위 변경) (0) | 2024.10.18 |
[리눅스] iostat 명령어 완벽 가이드 사용법(디스크 I/O 성능 확인) (0) | 2024.10.18 |
[리눅스] lsof 명령어 완벽 가이드 사용법(네트워크 연결 상태 확인) (0) | 2024.10.18 |