Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

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 에 저장됩니다.

추가 리소스