728x90
반응형

ProcDump Build Status

ProcDump는 Windows용 Sysinternals 도구 제품군의 클래식 ProcDump 도구를 Linux에서 재구성한 것입니다. ProcDump는 Linux 개발자가 성능 트리거를 기반으로 애플리케이션의 코어 덤프를 생성할 수 있는 편리한 방법을 제공합니다. Linux용 ProcDump는 Sysinternals의 일부입니다.

ProcDump in use

설치 & 사용법

요구사항

  • 최소 OS:
    • Red Hat Enterprise Linux / CentOS 7
    • Fedora 29
    • Ubuntu 16.04 LTS
  • gdb >= 7.6.1

ProcDump 설치하기

여기에서 설치 지침을 참조하세요.

빌드하기

여기의 빌드 지침을 참조하세요.

사용법

주요 변경 사항 ProcDump 1.3이 출시되면서 스위치는 이제 Windows ProcDump 버전에 맞춰 조정되었습니다.

Capture Usage:
   procdump [-n Count]
            [-s Seconds]
            [-c|-cl CPU_Usage]
            [-m|-ml Commit_Usage1[,Commit_Usage2...]]
            [-gcm [<GCGeneration>: | LOH: | POH:]Memory_Usage1[,Memory_Usage2...]]
            [-gcgen Generation]
            [-restrack]
            [-sr Sample_Rate]
            [-tc Thread_Threshold]
            [-fc FileDescriptor_Threshold]
            [-sig Signal_Number1[,Signal_Number2...]]
            [-e]
            [-f Include_Filter,...]
            [-fx Exclude_Filter]
            [-mc Custom_Dump_Mask]
            [-pf Polling_Frequency]
            [-o]
            [-log]
            {
             {{[-w] Process_Name | [-pgid] PID} [Dump_File | Dump_Folder]}
            }

Options:
   -n      종료하기 전에 쓸 덤프 수입니다.
   -s      덤프가 기록되기 전의 연속 초(sec) 입니다 (기본값은 10).
   -c      프로세스 덤프를 생성할 CPU 임계값입니다.
   -cl     프로세스 덤프를 생성할 CPU 임계값 미만입니다.
   -m      덤프를 생성할 메모리 커밋 초과 임계값(MB) 입니다.
   -ml     덤프를 생성할 메모리 커밋 미만 임계값(MB) 입니다.
   -gcm    [.NET] 지정된 세대 또는 힙에 대한 덤프를 생성하기 위한 GC 메모리 임계값(MB)입니다(기본값은 총 .NET 메모리 사용량입니다).
   -gcgen  [.NET] 지정된 세대의 가비지 수집이 시작되고 완료되면 덤프를 생성합니다.
   -restrack 메모리 누수 추적을 활성화합니다(malloc API 패밀리).
   -sr     -restrack을 사용할 때의 샘플링 속도.
   -tc     프로세스 덤프를 생성할 스레드 수 임계값입니다.
   -fc     프로세스 덤프를 생성할 파일 설명자 수 임계값입니다.
   -sig    신호가 프로세스 덤프를 발생시키는 동안 쉼표로 구분된 신호 번호 목록입니다.
   -e      [.NET] 프로세스에서 예외가 발생하면 덤프를 만듭니다.
   -f      .NET 예외 내용을 필터링(포함)합니다(쉼표로 구분). 와일드카드(*)가 지원됩니다.
   -fx     -restrack 호출 스택의 내용을 필터링 (제외)합니다. 와일드카드(*)가 지원됩니다.
   -mc     코어 덤프에 포함되어야 하는 메모리를 나타내는 사용자 정의 코어 덤프 마스크(16진수)입니다. 사용 가능한 옵션은 'man core'(/proc/[pid]/coredump_filter)를 참조하세요.
   -pf     폴링 빈도.
   -o      기존 덤프 파일을 덮어씁니다.e.
   -log    확장된 ProcDump 추적을 syslog에 기록합니다.
   -w      실행되고 있지 않은 경우 지정된 프로세스가 시작될 때까지 기다리십시오.
   -pgid   지정된 프로세스 ID는 프로세스 그룹 ID를 나타냅니다.

자원 추적

-restrack 스위치는 리소스 추적을 활성화하여 코어 덤프 생성 시 해제되지 않은 리소스 할당을 모니터링하고 보고할 수 있도록 합니다. 결과는 '.restrack' 확장자를 가진 파일에 저장됩니다. 현재 다음과 같은 리소스 할당/할당 취소 기능이 추적됩니다.

할당:

  • malloc
  • calloc
  • realloc
  • reallocarray
  • mmap

해제:

  • free
  • munmap

예제

다음 예제는 모두 pid == 1234d인 프로세스를 대상으로 합니다.

  • 1️⃣ 다음은 코어 덤프를 즉시 생성합니다.
sudo procdump 1234
  • 2️⃣ 다음은 10초 간격으로 3개의 코어 덤프를 생성합니다.
sudo procdump -n 3 1234
  • 3️⃣ 다음은 5초 간격으로 3개의 코어 덤프를 생성합니다.
sudo procdump -n 3 -s 5 1234
  • 4️⃣ 다음은 프로세스의 CPU 사용량이 65%를 초과할 때마다 최대 3회, 각 덤프 사이에 최소 10초의 간격을 두고 코어 덤프를 생성합니다.
sudo procdump -c 65 -n 3 1234
  • 5️⃣ 다음은 프로세스의 CPU 사용량이 65%를 초과할 때마다 최대 3회, 각 덤프 사이에 최소 5초 간격으로 코어 덤프를 생성합니다.
sudo procdump -c 65 -n 3 -s 5 1234
  • 6️⃣ 다음은 CPU 사용량이 [10,65] 범위를 벗어날 때 코어 덤프를 생성합니다.
sudo procdump -cl 10 -c 65 1234
  • 7️⃣ 다음은 CPU 사용량이 >= 65% 이거나 메모리 사용량이 >= 100MB 인 경우 코어 덤프를 생성합니다.
sudo procdump -c 65 -m 100 1234
  • 8️⃣ 다음은 메모리 사용량이 100MB 이상이면 코어 덤프를 생성하고, 메모리 사용량이 200MB 이상이면 또 다른 덤프를 생성합니다.
sudo procdump -m 100,200 1234
  • 9️⃣ 다음은 메모리 사용량이 100MB를 초과할 때 코어 덤프 및 메모리 누수 보고서를 생성합니다.
sudo procdump -m 100 -restrack 1234
  • 1️⃣ 0️⃣ 다음은 10번째 메모리 할당마다 샘플링하여 메모리 사용량이 100MB를 초과할 때 코어 덤프 및 메모리 누수 보고서를 생성합니다.
sudo procdump -m 100 -restrack -sr 10 1234
  • 1️⃣ 1️⃣ 다음은 메모리 사용량이 100MB를 초과할 때 코어 덤프 및 메모리 누수 보고서를 생성하고 문자열 "cache"가 포함된 프레임이 포함된 호출 스택을 제외합니다.
sudo procdump -m 100 -restrack -fx *cache* 1234
  • 1️⃣ 2️⃣ 다음은 총 .NET 메모리 사용량이 100MB 이상이면 코어 덤프를 생성하고, 메모리 사용량이 200MB 이상이면 또 다른 덤프를 생성합니다.
sudo procdump -gcm 100,200 1234
  • 1️⃣ 3️⃣ 다음은 1세대의 .NET 메모리 사용량이 1MB보다 클 때 코어 덤프를 생성하고, 메모리 사용량이 2MB보다 클 때 또 다른 덤프를 생성합니다.
sudo procdump -gcm 1:1,2 1234
  • 1️⃣ 4️⃣ 다음은 .NET Large Object Heap 메모리 사용량이 100MB를 초과할 때 코어 덤프를 생성하고, 메모리 사용량이 200MB를 초과할 때 또 다른 덤프를 생성합니다.
sudo procdump -gcm LOH:100,200 1234
  • 1️⃣ 5️⃣ 다음은 .NET 1세대 가비지 수집의 시작과 끝에서 코어 덤프를 만듭니다.
sudo procdump -gcgen 1
  • 1️⃣ 6️⃣ 다음은 /tmp 디렉토리에 즉시 코어 덤프를 생성합니다.
sudo procdump 1234 /tmp
  • 1️⃣ 7️⃣ 다음은 현재 디렉터리에 dump_0.1234라는 이름의 코어 덤프를 생성합니다. -n을 사용하면 파일 이름은 dump_0.1234, dump_1.1234 등으로 지정됩니다.
sudo procdump 1234 dump
  • 1️⃣ 8️⃣ 다음은 SIGSEGV가 발생할 때 코어 덤프를 생성합니다..
sudo procdump -sig 11 1234
  • 1️⃣ 9️⃣ 다음은 코어 덤프에 익명 프라이빗 매핑(anonymous private mapping)만 포함된 SIGSEGV가 발생할 때 코어 덤프를 생성합니다.
sudo procdump -mc 1 -sig 11 1234
  • 2️⃣ 0️⃣ 다음은 대상 .NET 애플리케이션이 System.InvalidOperationException을 발생시킬 때 코어 덤프를 생성합니다.
sudo procdump -e -f System.InvalidOperationException 1234

포함 필터는 부분 및 와일드카드 일치를 지원하므로 다음은 System.InvalidOperationException에 대한 코어 덤프도 생성합니다.

sudo procdump -e -f InvalidOperation 1234

또는

sudo procdump -e -f "*Invali*Operation*" 1234

모든 옵션은 -w와 함께 사용하여 주어진 이름을 가진 프로세스를 기다릴 수도 있습니다.

  • 2️⃣ 1️⃣ 다음은 my_application이라는 프로세스를 기다리고 프로세스가 발견되면 즉시 코어 덤프를 생성합니다.
sudo procdump -w my_application

현재 제한사항

  • 현재 Linux 커널 버전 3.5 이상에서만 실행됩니다.

  • Windows 버전의 ProcDump와 전체 기능 패리티가 없습니다. 특히, 활성 상태 유지 기능 및 사용자 정의 성능 카운터가 없습니다.

피드백

  • StackOverflow에 질문하기 (ProcDumpForLinux 태그)

  • GitHub에서 새로운 기능을 요청하세요

  • 인기 있는 기능 요청에 투표

  • GitHub 문제에 버그 신고

기여

문제를 해결하고 코드 베이스에 직접 기여하는 데 관심이 있다면 기여 방법 문서를 참조하세요, 이는 다음의 내용을 다룹니다:

  • 소스에서 빌드하고 실행하는 방법

  • 디버깅 및 테스트 실행을 포함한 개발 워크플로

  • 코딩 지침

  • 풀 리퀘스트 제출

행동 강령도 참조하세요.

License

Copyright (c) Microsoft Corporation. All rights reserved.

Licensed under the MIT License.

ProcDump for Linux:

728x90
반응형

+ Recent posts