Files
greptimedb/docs/how-to/how-to-profile-memory.md
Yingwen d168bde226 feat!: move v1/prof API to debug/prof (#4810)
* feat!: move v1/prof to debug/prof

* docs: update readme

* docs: move prof docs to docs dir

* chore: update message

* feat!: remove v1/prof

* docs: update mem prof docs
2024-10-11 04:16:37 +00:00

1.2 KiB

Profile memory usage of GreptimeDB

This crate provides an easy approach to dump memory profiling info.

Prerequisites

jemalloc

# for macOS
brew install jemalloc

# for Ubuntu
sudo apt install libjemalloc-dev

flamegraph

curl https://raw.githubusercontent.com/brendangregg/FlameGraph/master/flamegraph.pl > ./flamegraph.pl

Build GreptimeDB with mem-prof feature.

cargo build --features=mem-prof

Profiling

Start GreptimeDB instance with environment variables:

MALLOC_CONF=prof:true,lg_prof_interval:28 ./target/debug/greptime standalone start

Dump memory profiling data through HTTP API:

curl localhost:4000/debug/prof/mem > greptime.hprof

You can periodically dump profiling data and compare them to find the delta memory usage.

Analyze profiling data with flamegraph

To create flamegraph according to dumped profiling data:

sudo apt install -y libjemalloc-dev

jeprof <path_to_greptime_binary> <profile_data> --collapse | ./flamegraph.pl > mem-prof.svg

jeprof <path_to_greptime_binary> --base <baseline_prof> <profile_data> --collapse | ./flamegraph.pl > output.svg