JustinAzoff / zeek-jemalloc-profiling

a zeekctl plugin that helps configure MALLOC_CONF for profiling
MIT License
2 stars 3 forks source link

Installing

zkg install zeek-jemalloc-profiling

Verify jemalloc support:

root@x230:~# zeekctl jeprof.check
jemalloc profiling enabled: True

Enabling

In your node.cfg add jeprof_enable=1 like so:

[worker-1]
type=worker
host=localhost
interface=af_packet::eth0
lb_method=custom
lb_procs=2
jeprof_enable=1

All options

Node options:

jeprof_enable=1  # Enable jeprof
jeprof_all_workers=true #Enable profiling on all workers instead of just the first one

Global options for broctl.cfg:

jeprof.malloc_conf=...  # extra options to add to MALLOC_CONF
jeprof.lg_prof_interval=30 # see http://jemalloc.net/jemalloc.3.html#opt.lg_prof_interval

Processing profile output

./process.py /usr/local/zeek/spool | tee -a jeprof.log

Graphing

The process.py script can be useful to stream the profile to an external metrics system for long term recording.

For interactive debugging it can be more useful to use the jeprof utility directly with the .heap files stored in a worker's spool directory.

Either by using the text interface directly, or export data to an SVG file (or the dot raw data with --dot):

$ jeprof /opt/zeek/bin/zeek --svg $(ls /opt/zeek/spool/worker-1-1/jeprof.out*heap | tail -n 1) > profile-$(date +%Y%m%d-%H%M%S).svg

Above command will produce an SVG for the most recent .heap file created.