CPU, 시간 경과에 따른 메모리 사용량, 라인 번호 분석을 위한 지속적인 프로파일링입니다. 인프라 비용 절감, 성능 향상, 신뢰성 향상.
eBPF 프로파일러 : eBPF를 사용하는 단일 프로파일러는 매우 낮은 오버헤드로 Kubernetes에서 대상을 자동으로 검색하거나 전체 인프라에 걸쳐 시스템화됩니다. C, C++, Rust, Go 등을 지원합니다!
개방형 표준 : eBPF 기반 프로파일러를 사용하여 pprof 형식 프로필을 생성하고 pprof 형식 프로필을 수집하여 광범위한 언어 채택 및 기존 도구와의 상호 운용성을 허용합니다.
최적화된 저장 및 쿼리 : 원시 데이터를 유지하면서 프로파일링 데이터를 효율적으로 저장하고 레이블 기반 검색을 통해 데이터를 슬라이싱 및 다이싱할 수 있습니다. 프로파일링 데이터 인프라 전체를 집계하고, 단일 프로필을 적시에 확인하거나 모든 차원에서 비교할 수 있습니다.
피드백이 있는 경우 이 프로젝트의 GitHub 토론에서 토론을 열어주세요. 우리는 당신의 생각을 배우고 싶습니다!
업데이트되고 심층적인 설치 가이드와 문서를 보려면 Parca 웹사이트를 확인하세요!
parca.dev
Go, Node, Pnpm이 설치되어 있어야 합니다.
프로젝트 복제
git clone https://github.com/parca-dev/parca.git
프로젝트 디렉토리로 이동
cd parca
UI 빌드 및 Go 바이너리 컴파일
make build
바이너리는 bin/parca
로 컴파일되었습니다.
./bin/parca
이제 Parca는 로컬에서 실행되고 있으며 해당 웹 UI는 http://localhost:7070/에서 사용할 수 있습니다.
기본적으로 Parca는 자체 pprof 엔드포인트를 스크랩하고 있으며 시간이 지남에 따라 프로필이 표시되는 것을 볼 수 있습니다. 스크랩 구성은 저장소 루트의 parca.yaml
에서 변경할 수 있습니다.
플래그:
Usage: parca [flags]
Flags:
-h, --help Show context-sensitive help.
--config-path="parca.yaml"
Path to config file.
--mode="all" Scraper only runs a scraper that sends to a
remote gRPC endpoint. All runs all components.
--http-address=":7070" Address to bind HTTP server to.
--http-read-timeout=5s Timeout duration for HTTP server to read
request body.
--http-write-timeout=1m Timeout duration for HTTP server to write
response body.
--port="" (DEPRECATED) Use http-address instead.
--log-level="info" Log level.
--log-format="logfmt" Configure if structured logging as JSON or as
logfmt
--otlp-address=STRING The endpoint to send OTLP traces to.
--otlp-exporter="grpc" The OTLP exporter to use.
--cors-allowed-origins=CORS-ALLOWED-ORIGINS,...
Allowed CORS origins.
--version Show application version.
--path-prefix="" Path prefix for the UI
--mutex-profile-fraction=0
Fraction of mutex profile samples to collect.
--block-profile-rate=0 Sample rate for block profile.
--enable-persistence Turn on persistent storage for the metastore
and profile storage.
--storage-active-memory=536870912
Amount of memory to use for active storage.
Defaults to 512MB.
--storage-path="data" Path to storage directory.
--storage-enable-wal Enables write ahead log for profile storage.
--storage-snapshot-trigger-size=134217728
Number of bytes to trigger a snapshot. Defaults
to 1/4 of active memory. This is only used if
enable-wal is set.
--storage-row-group-size=8192
Number of rows in each row group during
compaction and persistence. Setting to <= 0
results in a single row group per file.
--storage-index-on-disk Whether to store the index on disk instead
of in memory. Useful to reduce the memory
footprint of the store.
--symbolizer-demangle-mode="simple"
Mode to demangle C++ symbols. Default mode
is simplified: no parameters, no templates,
no return type
--symbolizer-number-of-tries=3
Number of tries to attempt to symbolize an
unsybolized location
--debuginfo-cache-dir="/tmp"
Path to directory where debuginfo is cached.
--debuginfo-upload-max-size=1000000000
Maximum size of debuginfo upload in bytes.
--debuginfo-upload-max-duration=15m
Maximum duration of debuginfo upload.
--debuginfo-uploads-signed-url
Whether to use signed URLs for debuginfo
uploads.
--debuginfod-upstream-servers=debuginfod.elfutils.org,...
Upstream debuginfod servers. Defaults to
debuginfod.elfutils.org. It is an ordered
list of servers to try. Learn more at
https://sourceware.org/elfutils/Debuginfod.html
--debuginfod-http-request-timeout=5m
Timeout duration for HTTP request to upstream
debuginfod server. Defaults to 5m
--profile-share-server="api.pprof.me:443"
gRPC address to send share profile requests to.
--store-address=STRING gRPC address to send profiles and symbols to.
--bearer-token=STRING Bearer token to authenticate with store.
--bearer-token-file=STRING
File to read bearer token from to authenticate
with store.
--insecure Send gRPC requests via plaintext instead of
TLS.
--insecure-skip-verify Skip TLS certificate verification.
--external-label=KEY=VALUE;...
Label(s) to attach to all profiles in
scraper-only mode.
Parca는 원래 Polar Signals에서 개발되었습니다. 발표 블로그 게시물 읽기: https://www.polesignals.com/blog/posts/2021/10/08/introducing-parca-we-got-funded/
시작하려면 기여 가이드를 확인하세요! Parca를 컴파일하고, Kubernetes에서 컨테이너로 Tilt를 사용하여 실행하고, Pull Request를 보내는 방법을 설명합니다.
멋진 분들에게 감사드립니다(이모지 키):
프레데릭 브란치크 ? | 토르 ? | 마티아스 로이블 ? | 케말 아코윤 | 수메라 프리야다르시니 |
제시카 린스 | 홀거 프레이더 | 세르기우시 우르바니아크 ? | 파웰 크루파 ? | 벤 예 ? |
펠릭스 ? | 크리스티안 바르그만 | 요미 엘루완데 | 마노이 비벡 | 모니카 보이치에호프스카 |
마누엘 뤼거 ? | 아비나쉬 우파디아야 KR | 아시미네 잇코 | 막심 브루넷 ? | 로히트 |
우즈왈 고얄 | 하비에르 온두빌라 코토 | 마르셀 마블렛쿨로프 | 카우틸리아 트리파티 | 존 시거 |
필립 고프 | 보란 세레프 | 웬 롱 | 큐이 플라이터 | 알폰소 수비오토 마르케스 |
톰헬리어 | 스테판 밴뷰렌 | 카를로스 타데우 파나토 주니어 ? | 다니엘(시준) 치안 | 알렉스 조끼 |
슈밤 팔리왈라 | 파비안 레이나츠 | 카르틱 라자 | 꽤 4 일 | 버트 |
모하마드 S | 니킬레시 수살라 | 프랑코 산체스 | 안드레아 스카르피노 | 막심 나보키크 |
이 프로젝트는 모든 기여자 사양을 따릅니다. 어떤 종류의 기여도 환영합니다!
우리는 Meticulous를 사용하여 원하지 않는 변경 사항이 있는지 UI를 자동으로 테스트합니다.