---
name: "jeprof"
section: "1"
platform: "linux"
package: "libjemalloc-dev"
version: "5.3.0-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/jeprof"
---

# jeprof(1)

analyze and print jemalloc's heap profile dumps

## NAME

jeprof - analyze and print jemalloc's heap profile dumps

## SYNOPSIS

- **jeprof** \[*options*\] \<*program*\> \<*profiles*\>

  - **jeprof** \[*options*\] \<*symbolized-profiles*\>

  - **jeprof** \[*options*\] \<*profile*\>

  - **jeprof** --symbols *program*

  ## DESCRIPTION

jeprof can be used to parse, analyze and generate user-readable output from jemalloc's memory profile dumps.  Refer to [**jemalloc**(3)](/jemalloc/3.md) or the jemalloc website \<http://jemalloc.net/\> about jemalloc and the **opt.prof** option.

jeprof is based on [**pprof**(1)](/pprof/1.md) that is developed as part of the \<https://github.com/gperftools/gperftools\> gperftools package.

Common usage:

- **jeprof** \[*options*\] \<*program*\> \<*profiles*\>

  Interactive mode. \<*profiles*\> is a space separated list of profile names.

- **jeprof** \[*options*\] \<*symbolized-profiles*\>

  \<*symbolized-profiles*\> is a list of profile files where each file contains the necessary symbol mappings  as well as profile data (likely generated with --raw).

- **jeprof** \[*options*\] \<*profile*\>

  \<*profile*\> is a remote form. Each name can be:

  - */path/to/profile*

    a path to a profile file

  - *host:port\[/\<service*\]\>

    a location of a service to get the profile from.

  /\<service\> can be /pprof/heap, /pprof/profile, /pprof/pmuprofile, /pprof/growth, /pprof/contention, /pprof/wall, /pprof/censusprofile, or /pprof/filteredprofile.

  For instance:

  jeprof http://myserver.example.com:80/pprof/heap

  If /\<service\> is omitted, the service defaults to /pprof/profile (CPU profiling).

- **jeprof** --symbols *program*

  Maps addresses to symbol names. In this mode, stdin should be a list of library mappings, in the same format as is found in the heap- and CPU-profile files (this loosely matches that of /proc/self/maps on Linux), followed by a list of hex addresses to map, one per line.

## OPTIONS AND ARGUMENTS

### Options

- **--cum**

  Sort by cumulative data.

- **--base=***base*

  Subtract \<base\> from \<profile\> before display.

- **--interactive**

  Run in interactive mode. (interactive "help" gives help) \[default\]

- **--seconds=***n*

  Length of time for dynamic profiles. \[default=30 secs\]

- **--add\_lib=***file*

  Read additional symbols and line info from the given library.

- **--lib\_prefix=***dir*

  Comma separated list of library path prefixes.

### Reporting granularity

- **--addresses**

  Report at address level.

- **--lines**

  Report at source line level.

- **--functions**

  Report at function level. \[default\]

- **--files**

  Report at source file level.

### Output type

- **--text**

  Generate text report.

- **--callgrind**

  Generate callgrind format to stdout.

- **--gv**

  Generate Postscript and display.

- **--evince**

  Generate PDF and display.

- **--web**

  Generate SVG and display.

- **--list=***regexp*

  Generate source listing of matching routines.

- **--disasm=***regexp*

  Generate disassembly of matching routines.

- **--symbols**

  Print demangled symbol names found at given addresses.

- **--dot**

  Generate DOT file to stdout.

- **--ps**

  Generate PostScript to stdout.

- **--pdf**

  Generate PDF to stdout.

- **--svg**

  Generate SVG to stdout.

- **--gif**

  Generate GIF to stdout.

- **--raw**

  Generate symbolized jeprof data (useful with remote fetch).

### Heap-profile options

- **--inuse\_space**

  Display in-use (mega)bytes. \[default\]

- **--inuse\_objects**

  Display in-use objects.

- **--alloc\_space**

  Display allocated (mega)bytes.

- **--alloc\_objects**

  Display allocated objects.

- **--show\_bytes**

  Display space in bytes.

- **--drop\_negative**

  Ignore negative differences.

### Contention-profile options

- **--total\_delay**

  Display total delay at each region. \[default\]

- **--contentions**

  Display number of delays at each region.

- **--mean\_delay**

  Display mean delay at each region.

### Call-graph options

- **--nodecount=***n*

  Show at most so many nodes. \[default=80\]

- **--nodefraction=***f*

  Hide nodes below *f*\*total. \[default=.005\]

- **--edgefraction=***f*

  Hide edges below *f*\*total. \[default=.001\]

- **--maxdegree=***n*

  Max incoming/outgoing edges per node. \[default=8\]

- **--focus=***regexp*

  Focus on backtraces with nodes matching *regexp*.

- **--thread=***n*

  Show profile for thread *n*.

- **--ignore=***regexp*

  Ignore backtraces with nodes matching *regexp*.

- **--scale=***n*

  Set GV scaling. \[default=0\]

- **--heapcheck**

  Make nodes with non-0 object counts (i.e. direct leak generators) more visible.

- **--retain=***regexp*

  Retain only nodes that match *regexp*.

- **--exclude=***regexp*

  Exclude all nodes that match *regexp*.

### Miscellaneous

- **--tools=***prefix* or **--tools=***binary:fullpath\[,...\]*

  Path for object tool pathnames.

- **--test**

  Run unit tests.

- **--help**

  This message.

- **--version**

  Version information.

## ENVIRONMENT

The following environment variables affect the execution of jeprof:

- **JEPROF\_TMPDIR**

  Profiles directory. Defaults to `$HOME`/jeprof.

- **JEPROF\_TOOLS**

  Prefix for object tools pathnames.

## EXAMPLES

- jeprof /bin/ls ls.prof

  Enters interactive mode.

- jeprof --text /bin/ls ls.prof

  Generates one line per procedure.

- jeprof --web /bin/ls ls.prof

  Displays annotated call-graph in web browser.

- jeprof --gv /bin/ls ls.prof

  Generates annotated call-graph and displays via **gv**.

- jeprof --gv --focus=Mutex /bin/ls ls.prof

  Restrict to code paths that involve an entry that matches *Mutex*.

- jeprof --gv --focus=Mutex --ignore=string /bin/ls ls.prof

  Restrict to code paths that involve an entry that matches *Mutex* and does not match *string*.

- jeprof --list=getdir /bin/ls ls.prof

  Generates disassembly listing of all routines with at least one sample that match **getdir()**. The listing is annotated with the flat and cumulative sample counts at each line.

- jeprof --disasm=getdir /bin/ls ls.prof

  Generates disassembly listing of all routines with at least one sample that match **getdir()**. The listing is annotated with the flat and cumulative sample counts at each PC value.

- jeprof http://localhost:1234/

  Enters interactive mode.

- jeprof --text localhost:1234

  Outputs one line per procedure for localhost:1234.

- jeprof --raw localhost:1234 \> ./local.raw; jeprof --text ./local.raw

  Fetches a remote profile for later analysis and then analyzes it in text mode.

## SEE ALSO

[**jemalloc**(3)](/jemalloc/3.md)
