Skip to main content

How to Profile Databend

CPU profiling

go tool pprof -http="0.0.0.0:8081" http://localhost:8080/debug/pprof/profile?seconds=30

Open <your-ip>:8081 and select Flame Graph from the VIEW menus in the site header:

Memory profiling

databend-query and databend-meta can be built optionally with jemalloc, which provides various memory profiling features.

Currently, it does not work on Mac, with either intel or ARM.

Enable memory profiling

  1. Build databend-query with memory-profiling feature enabled:

    cargo build --bin databend-query --release --features memory-profiling
  2. Fire up databend, using environment variable MALLOC_CONF to enable memory profiling:

    MALLOC_CONF=prof:true,lg_prof_interval:30 ./target/release/databend-query

Generate heap profile

Generate a call graph in pdf illustrating memory allocation during this interval:

jeprof --pdf ./target/release/databend-query heap.prof > heap.pdf

Fast jeprof

jeprof is very slow for large heap analysis, the bottleneck is addr2line, if you want to speed up from 30 minutes to 3s, please use :

git clone https://github.com/gimli-rs/addr2line
cd addr2line
cargo b --examples -r
cp ./target/release/examples/addr2line <your-addr2line-find-with-whereis-addr2line>