ProcDump는 Windows용 Sysinternals 도구 제품군의 클래식 ProcDump 도구를 Linux에서 재구성한 것입니다. ProcDump는 Linux 개발자가 성능 트리거를 기반으로 애플리케이션의 코어 덤프를 생성할 수 있는 편리한 방법을 제공합니다. Linux용 ProcDump는 Sysinternals의 일부입니다.
- (번역) : https://j2doll.tistory.com/756
- (홈페이지) : https://github.com/Sysinternals/ProcDump-for-Linux
- (윈도우즈용 procdump 소개) : https://j2doll.tistory.com/538
- 최소 OS:
Red Hat Enterprise Linux / CentOS 7
Fedora 29
Ubuntu 16.04 LTS
gdb
>= 7.6.1
여기에서 설치 지침을 참조하세요.
여기의 빌드 지침을 참조하세요.
주요 변경 사항 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 문제에 버그 신고
문제를 해결하고 코드 베이스에 직접 기여하는 데 관심이 있다면 기여 방법 문서를 참조하세요, 이는 다음의 내용을 다룹니다:
-
소스에서 빌드하고 실행하는 방법
-
디버깅 및 테스트 실행을 포함한 개발 워크플로
-
코딩 지침
-
풀 리퀘스트 제출
행동 강령도 참조하세요.
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License.
ProcDump for Linux:
-
Clones, compiles and statically links against libbpf (https://github.com/libbpf/libbpf)
-
Copies symbol resolution source code from BCC (https://github.com/iovisor/bcc).
-
Uses eBPF
'Linux' 카테고리의 다른 글
30개의 무료 오픈 소스 Linux 게임 - 2부 (0) | 2024.10.21 |
---|---|
VcXsrv X Server에서 한글 보기 (0) | 2024.07.07 |
PowerPC 실행 프로그램을 x64 Ubuntu에서 수행하기 (0) | 2023.04.26 |
WSL 에서 ssh 서버(server) 구동 (0) | 2022.04.15 |
lolcat 을 ls, cat, grep 명령어에만 적용하는 방법 (lolcat bashrc) (0) | 2022.03.17 |