검색

20.3.2. strace를 사용하여 애플리케이션의 시스템 호출 모니터링

download PDF

strace 툴을 사용하면 애플리케이션과 Linux 커널 간의 상호 작용을 추적(선택적으로 변조)합니다(시스템 호출, 신호 전달 및 프로세스 상태 변경 등)

사전 요구 사항
  • strace 가 시스템에 설치되어 있습니다.

    • strace 를 설치하려면 root로 실행합니다.

      # yum install strace
절차

strace 의 추적 사양 구문에서는 시스템 호출을 식별하는 데 도움이 되는 정규식 및 syscall 클래스를 제공합니다.

  1. 모니터링할 프로세스를 실행하거나 연결합니다.

    • 모니터링할 프로그램이 실행되고 있지 않으면 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) 매뉴얼 페이지에 제공됩니다.

    • 프로그램이 이미 실행 중인 경우 프로세스 ID(pid)를 찾아 strace 를 여기에 연결합니다.

      $ ps -C program
      (...)
      $ strace -fvttTyy -s 256 -e trace=call -ppid
    • 분기된 프로세스 또는 스레드를 추적하지 않으려면 -f 옵션을 사용하지 마십시오.
  1. strace 는 애플리케이션 및 세부 정보에 의해 수행된 시스템 호출을 표시합니다.

    대부분의 경우 시스템 호출에 대한 필터가 설정되지 않은 경우 애플리케이션 및 해당 라이브러리는 많은 호출을 만들고 strace 출력을 즉시 표시합니다.

  2. strace 는 추적된 모든 프로세스가 종료될 때 종료됩니다. 추적 프로그램이 종료되기 전에 모니터링을 종료하려면 Ctrl+C 를 누릅니다.

    • strace 가 프로그램을 시작한 경우 종료 신호(이 경우, 이 경우)가 시작되는 프로그램에 전송됩니다. 그러나 이 프로그램은 차례로 해당 신호를 무시할 수 있습니다.
    • strace 를 이미 실행 중인 프로그램에 연결하면 strace 와 함께 프로그램이 종료됩니다.
  3. 애플리케이션에서 수행한 시스템 호출 목록을 분석합니다.

    • 리소스 액세스 또는 가용성 관련 문제는 반환 오류를 호출할 때 로그에 있습니다.
    • 시스템 호출 및 호출 시퀀스 패턴에 전달되는 값은 애플리케이션 동작의 원인에 대한 통찰력을 제공합니다.
    • 애플리케이션이 충돌하면 중요한 정보가 로그 끝에 있을 수 있습니다.
    • 출력에는 많은 추가 정보가 포함되어 있습니다. 그러나 더 정확한 필터를 생성하고 절차를 반복할 수 있습니다.
참고
  • 둘 다 출력을 보고 파일에 저장하는 것이 유리합니다. 이렇게 하려면 tee 명령을 실행합니다.

    $ strace ...-o |tee your_log_file.log>&2
  • 다른 프로세스에 해당하는 별도의 출력을 보려면 다음을 실행합니다.

    $ strace ... -ff -o your_log_file

    프로세스 ID(pid )가 있는프로세스출력은 your_log_file.pid 에 저장됩니다.

추가 리소스
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.