36.2. 성능 분석에 선택된 bcc-tools 사용

BPF Compiler Collection(BCC) 라이브러리의 사전 생성된 특정 프로그램을 사용하여 이벤트별로 시스템 성능을 효율적이고 안전하게 분석합니다. BCC 라이브러리에서 미리 생성된 프로그램 세트는 추가 프로그램 생성의 예 역할을 할 수 있습니다.

사전 요구 사항

execsnoop를 사용하여 시스템 프로세스 검사

  1. 하나의 터미널에서 execsnoop 프로그램을 실행합니다.

    # /usr/share/bcc/tools/execsnoop
  2. 다른 터미널에서 다음을 실행합니다. 예를 들면 다음과 같습니다.

    $ ls /usr/share/bcc/tools/doc/

    위 명령은 ls 명령의 수명이 짧은 프로세스를 생성합니다.

  3. execsnoop 를 실행하는 터미널은 다음과 유사한 출력을 보여줍니다.

    PCOMM	PID    PPID   RET ARGS
    ls   	8382   8287     0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/
    ...

    execsnoop 프로그램은 시스템 리소스를 사용하는 새 프로세스마다 출력의 행을 출력합니다. ls 와 같이 매우 빠르게 실행되는 프로그램 프로세스도 감지하며 대부분의 모니터링 툴은 등록하지 않습니다.

    execsnoop 출력에는 다음 필드가 표시됩니다.

    • PCOMM - 상위 프로세스 이름. (ls)
    • PID - 프로세스 ID입니다. (8382)
    • PPID - 상위 프로세스 ID입니다. (8287)
    • RET - 프로그램 코드를 새 프로세스에 로드하는 exec() 시스템 호출(0)의 반환 값입니다.
    • ARGS - 인수가 포함된 시작 프로그램의 위치입니다.

execsnoop 에 대한 자세한 정보, 예제 및 옵션을 보려면 /usr/share/bcc/tools/doc/execsnoop_example.txt 파일을 참조하십시오.

exec() 에 대한 자세한 내용은 exec(3) 매뉴얼 페이지를 참조하십시오.

opennoop를 사용하여 명령에서 열리는 파일을 추적할 수 있습니다.

  1. 하나의 터미널에서 opensnoop 프로그램을 실행합니다.

    # /usr/share/bcc/tools/opensnoop -n uname

    위의 명령은 uname 명령 프로세스에서만 여는 파일의 출력을 출력합니다.

  2. 다른 터미널에서 다음을 입력합니다.

    $ uname

    위의 명령은 특정 파일을 열고 다음 단계에서 캡처됩니다.

  3. 실행 중인 터미널 은 다음과 유사한 출력을 보여줍니다.

    PID    COMM 	FD ERR PATH
    8596   uname 	3  0   /etc/ld.so.cache
    8596   uname 	3  0   /lib64/libc.so.6
    8596   uname 	3  0   /usr/lib/locale/locale-archive
    ...

    opensnoop 프로그램은 전체 시스템에서 open() 시스템 호출을 감시하고 uname 이 방식을 따라 열려고 시도하는 각 파일의 출력 라인을 출력합니다.

    opensnoop 출력에는 다음 필드가 표시됩니다.

    • PID - 프로세스 ID입니다. (8596)
    • COMM - 프로세스 이름. (uname)
    • FD - open() 에서 열린 파일을 참조하기 위해 반환하는 값인 파일 설명자입니다. (3)
    • ERR - 모든 오류
    • PATH - open() 열기를 시도하는 파일의 위치입니다.

      명령이 존재하지 않는 파일을 읽으려고 하면 FD 열은 -1 을 반환하고 ERR 열에는 관련 오류에 해당하는 값이 출력됩니다. 따라서 opensnoop 는 제대로 작동하지 않는 애플리케이션을 식별하는 데 도움이 될 수 있습니다.

opensnoop 에 대한 자세한 정보, 예제 및 옵션을 보려면 /usr/share/bcc/tools/doc/opensnoop_example.txt 파일을 참조하십시오.

open() 에 대한 자세한 내용은 open(2) 매뉴얼 페이지를 참조하십시오.

BIOStop를 사용하여 디스크의 I/O 작업 검사

  1. 하나의 터미널에서 BIOS 프로그램을 실행합니다.

    # /usr/share/bcc/tools/biotop 30

    명령을 사용하면 디스크에서 I/O 작업을 수행하는 최상위 프로세스를 모니터링할 수 있습니다. 인수를 사용하면 명령이 30초 요약을 생성합니다.

    참고

    인수를 제공하지 않으면 기본적으로 출력 화면이 1초마다 새로 고쳐집니다.

  2. 다른 터미널에서 다음을 입력합니다. 예를 들면 다음과 같습니다.

    # dd if=/dev/vda of=/dev/zero

    위의 명령은 로컬 하드 디스크 장치에서 콘텐츠를 읽고 출력을 /dev/zero 파일에 씁니다. 이 단계는 BIOS 를 설명하기 위해 특정 I/O 트래픽을 생성합니다.

  3. biotop 실행 중인 터미널은 다음과 유사한 출력을 보여줍니다.

    PID    COMM             D MAJ MIN DISK       I/O  Kbytes     AVGms
    9568   dd               R 252 0   vda      16294 14440636.0  3.69
    48     kswapd0          W 252 0   vda       1763 120696.0    1.65
    7571   gnome-shell      R 252 0   vda        834 83612.0     0.33
    1891   gnome-shell      R 252 0   vda       1379 19792.0     0.15
    7515   Xorg             R 252 0   vda        280  9940.0     0.28
    7579   llvmpipe-1       R 252 0   vda        228  6928.0     0.19
    9515   gnome-control-c  R 252 0   vda         62  6444.0     0.43
    8112   gnome-terminal-  R 252 0   vda         67  2572.0     1.54
    7807   gnome-software   R 252 0   vda         31  2336.0     0.73
    9578   awk              R 252 0   vda         17  2228.0     0.66
    7578   llvmpipe-0       R 252 0   vda        156  2204.0     0.07
    9581   pgrep            R 252 0   vda         58  1748.0     0.42
    7531   InputThread      R 252 0   vda         30  1200.0     0.48
    7504   gdbus            R 252 0   vda          3  1164.0     0.30
    1983   llvmpipe-1       R 252 0   vda         39   724.0     0.08
    1982   llvmpipe-0       R 252 0   vda         36   652.0     0.06
    ...

    biotop 출력에는 다음 필드가 표시됩니다.

    • PID - 프로세스 ID입니다. (9568)
    • COMM - 프로세스 이름(dd)
    • DISK - 읽기 작업을 수행하는 디스크입니다. (vda)
    • I/O - 읽기 작업의 수입니다. (16294)
    • kbytes - 읽기 작업에서 도달한 Kbytes 의 양입니다. (14,440,636)
    • AVGms - 읽기 작업의 평균 I/O 시간입니다. (3.69)

biotop 에 대한 자세한 정보, 예제 및 옵션을 보려면 /usr/share/bcc/tools/doc/biotop_example.txt 파일을 참조하십시오.

dd 에 대한 자세한 내용은 dd(1) 매뉴얼 페이지를 참조하십시오.

xfsslower를 사용하여 예기치 않게 느린 파일 시스템 작업 노출

  1. 하나의 터미널에서 xfsslower 프로그램을 실행합니다.

    # /usr/share/bcc/tools/xfsslower 1

    위의 명령은 XFS 파일 시스템이 읽기, 쓰기, 열기 또는 동기화(fsync) 작업을 수행하는 데 사용하는 시간을 측정합니다. 1 인수는 프로그램이 1ms보다 느린 작업만 표시하도록 합니다.

    참고

    인수가 제공되지 않으면 xfsslower 는 기본적으로 10ms보다 느린 작업을 표시합니다.

  2. 다른 터미널에서 다음을 입력합니다.

    $ vim text

    위의 명령은 ovs 편집기에 텍스트 파일을 생성하여 XFS 파일 시스템과의 특정 상호 작용을 시작합니다.

  3. xfsslower 를 실행하는 터미널은 이전 단계에서 파일을 저장할 때 유사한 것을 보여줍니다.

    TIME     COMM           PID    T BYTES   OFF_KB   LAT(ms) FILENAME
    13:07:14 b'bash'        4754   R 256     0           7.11 b'vim'
    13:07:14 b'vim'         4754   R 832     0           4.03 b'libgpm.so.2.1.0'
    13:07:14 b'vim'         4754   R 32      20          1.04 b'libgpm.so.2.1.0'
    13:07:14 b'vim'         4754   R 1982    0           2.30 b'vimrc'
    13:07:14 b'vim'         4754   R 1393    0           2.52 b'getscriptPlugin.vim'
    13:07:45 b'vim'         4754   S 0       0           6.71 b'text'
    13:07:45 b'pool'        2588   R 16      0           5.58 b'text'
    ...

    위의 각 줄은 파일 시스템에서 작업을 나타내며 특정 임계값보다 더 많은 시간이 걸렸습니다. xfsslower 는 예기치 않은 느린 작업을 수행할 수 있는 파일 시스템 문제를 노출하는 데 유용합니다.

    xfsslower 출력에는 다음 필드가 표시됩니다.

    • COMM - 프로세스 이름. (b'bash')
    • t - 작업 유형입니다. (R)

      • Read
      • Write
      • Sync
    • OFF_KB - KB의 파일 오프셋입니다. (0)
    • 파일 이름 - 읽기, 쓰기 또는 동기화되는 파일입니다.

xfsslower 에 대한 세부 정보, 예제 및 옵션을 보려면 /usr/share/bcc/tools/doc/xfsslower_example.txt 파일을 참조하십시오.

fsync 에 대한 자세한 내용은 fsync(2) 매뉴얼 페이지를 참조하십시오.