20.3.2. strace를 사용하여 애플리케이션의 시스템 호출 모니터링
strace
툴을 사용하면 애플리케이션과 Linux 커널 간의 상호 작용을 추적(선택적으로 변조)합니다(시스템 호출, 신호 전달 및 프로세스 상태 변경 등)
사전 요구 사항
strace
가 시스템에 설치되어 있습니다.strace
를 설치하려면 root로 실행합니다.# yum install strace
절차
strace
의 추적 사양 구문에서는 시스템 호출을 식별하는 데 도움이 되는 정규식 및 syscall 클래스를 제공합니다.
모니터링할 프로세스를 실행하거나 연결합니다.
모니터링할 프로그램이 실행되고 있지 않으면
strace
를 시작하고 프로그램을 지정합니다:$ strace -fvttTyy -s 256 -e trace=call program
위 예제에서 사용되는 옵션은 필수가 아닙니다. 필요한 경우 다음을 수행하십시오.
-
f 옵션
은
" follow forks"의 약어입니다. 이 옵션은 포크, vfork 및 복제 시스템 호출에서 생성한 하위 항목을 추적합니다. -
-v
또는-e abbrev=none
옵션은 출력 약어를 비활성화하고 다양한 구조 필드를 생략합니다. -
-tt
옵션은 각 행의 접두사를 절대 타임스탬프로 지정하는-t
옵션의 변형입니다.-tt
옵션을 사용하면 인쇄된 시간에 microseconds가 포함됩니다. -
T 옵션은 각 시스템 호출에 사용된 시간을 줄 끝에 출력합니다.
-
y
옵션
은 파일 설명자 번호와 관련된 경로를 출력할 수 있는-y
옵션의 변형입니다. y옵션
은 경로뿐만 아니라 장치 파일 설명자와 연결된 소켓 파일 설명자 및 블록 또는 문자 장치 번호와 관련된 프로토콜 관련 정보를 출력합니다. -
-s
옵션은 인쇄할 최대 문자열 크기를 제어합니다. 파일 이름은 문자열로 간주되지 않으며 항상 전체적으로 인쇄됩니다. -e trace
는 추적할 시스템 호출 집합을 제어합니다.호출 을 쉼표로 구분된 시스템 호출 목록으로 바꿉니다. 호출이 남아 있으면
strace
는 모든 시스템 호출을 표시합니다. 일부 시스템 호출 그룹에 대한 요약은 strace(1) 매뉴얼 페이지에 제공됩니다.
-
f 옵션
프로그램이 이미 실행 중인 경우 프로세스 ID(pid)를 찾아
strace
를 여기에 연결합니다.$ ps -C program (...) $ strace -fvttTyy -s 256 -e trace=call -ppid
-
분기된 프로세스 또는 스레드를 추적하지 않으려면
-f
옵션을 사용하지 마십시오.
strace
는 애플리케이션 및 세부 정보에 의해 수행된 시스템 호출을 표시합니다.대부분의 경우 시스템 호출에 대한 필터가 설정되지 않은 경우 애플리케이션 및 해당 라이브러리는 많은 호출을 만들고
strace
출력을 즉시 표시합니다.strace
는 추적된 모든 프로세스가 종료될 때 종료됩니다. 추적 프로그램이 종료되기 전에 모니터링을 종료하려면 를 누릅니다.-
strace
가 프로그램을 시작한 경우 종료 신호(이 경우, 이 경우)가 시작되는 프로그램에 전송됩니다. 그러나 이 프로그램은 차례로 해당 신호를 무시할 수 있습니다. -
strace
를 이미 실행 중인 프로그램에 연결하면strace
와 함께 프로그램이 종료됩니다.
-
애플리케이션에서 수행한 시스템 호출 목록을 분석합니다.
- 리소스 액세스 또는 가용성 관련 문제는 반환 오류를 호출할 때 로그에 있습니다.
- 시스템 호출 및 호출 시퀀스 패턴에 전달되는 값은 애플리케이션 동작의 원인에 대한 통찰력을 제공합니다.
- 애플리케이션이 충돌하면 중요한 정보가 로그 끝에 있을 수 있습니다.
- 출력에는 많은 추가 정보가 포함되어 있습니다. 그러나 더 정확한 필터를 생성하고 절차를 반복할 수 있습니다.
참고
둘 다 출력을 보고 파일에 저장하는 것이 유리합니다. 이렇게 하려면
tee
명령을 실행합니다.$ strace ...-o |tee your_log_file.log>&2
다른 프로세스에 해당하는 별도의 출력을 보려면 다음을 실행합니다.
$ strace ... -ff -o your_log_file
프로세스 ID(pid )가 있는프로세스출력은 your_log_file.pid 에 저장됩니다.
추가 리소스
- strace(1) 도움말 페이지.
- Knowledgebase 문서 - strace를 사용하여 명령으로 수행된 시스템 호출을 추적하려면 어떻게 해야 합니까?
- Red Hat Developer Toolset 사용자 가이드 - strace