2007-03-22 03:00:33 +00:00
|
|
|
CPU PROFILER
|
|
|
|
------------
|
|
|
|
See doc/cpu-profiler.html for information about how to use the CPU
|
|
|
|
profiler and analyze its output.
|
|
|
|
|
|
|
|
As a quick-start, do the following after installing this package:
|
|
|
|
|
|
|
|
1) Link your executable with -lprofiler
|
|
|
|
2) Run your executable with the CPUPROFILE environment var set:
|
|
|
|
$ CPUPROFILE=/tmp/prof.out <path/to/binary> [binary args]
|
|
|
|
3) Run pprof to analyze the CPU usage
|
|
|
|
$ pprof <path/to/binary> /tmp/prof.out # -pg-like text output
|
|
|
|
$ pprof --gv <path/to/binary> /tmp/prof.out # really cool graphical output
|
|
|
|
|
|
|
|
There are other environment variables, besides CPUPROFILE, you can set
|
|
|
|
to adjust the cpu-profiler behavior; cf "ENVIRONMENT VARIABLES" below.
|
|
|
|
|
|
|
|
|
2007-03-22 03:28:56 +00:00
|
|
|
TCMALLOC
|
|
|
|
--------
|
|
|
|
Just link in -ltcmalloc to get the advantages of tcmalloc. See below
|
|
|
|
for some environment variables you can use with tcmalloc, as well.
|
|
|
|
|
|
|
|
|
|
|
|
HEAP PROFILER
|
|
|
|
-------------
|
|
|
|
See doc/heap-profiler.html for information about how to use tcmalloc's
|
|
|
|
heap profiler and analyze its output.
|
|
|
|
|
|
|
|
As a quick-start, do the following after installing this package:
|
|
|
|
|
|
|
|
1) Link your executable with -ltcmalloc
|
|
|
|
2) Run your executable with the HEAPPROFILE environment var set:
|
|
|
|
$ HEAPROFILE=/tmp/heapprof <path/to/binary> [binary args]
|
|
|
|
3) Run pprof to analyze the heap usage
|
|
|
|
$ pprof <path/to/binary> /tmp/heapprof.0045.heap # run 'ls' to see options
|
|
|
|
$ pprof --gv <path/to/binary> /tmp/heapprof.0045.heap
|
|
|
|
|
|
|
|
You can also use LD_PRELOAD to heap-profile an executable that you
|
|
|
|
didn't compile.
|
|
|
|
|
|
|
|
There are other environment variables, besides HEAPPROFILE, you can
|
|
|
|
set to adjust the heap-profiler behavior; cf "ENVIRONMENT VARIABLES"
|
|
|
|
below.
|
|
|
|
|
|
|
|
|
2007-03-22 03:00:33 +00:00
|
|
|
HEAP CHECKER
|
|
|
|
------------
|
2007-03-22 03:28:56 +00:00
|
|
|
See doc/heap-checker.html for information about how to use tcmalloc's
|
|
|
|
heap checker.
|
2007-03-22 03:00:33 +00:00
|
|
|
|
2007-03-22 03:28:56 +00:00
|
|
|
In order to catch all heap leaks, tcmalloc must be linked *last* into
|
|
|
|
your executable. The heap checker may mischaracterize some memory
|
|
|
|
accesses in libraries listed after it on the link line. For instance,
|
|
|
|
it may report these libraries as leaking memory when they're not.
|
|
|
|
(See the source code for more details.)
|
2007-03-22 03:00:33 +00:00
|
|
|
|
2007-03-22 03:28:56 +00:00
|
|
|
Here's a quick-start for how to use:
|
|
|
|
|
|
|
|
As a quick-start, do the following after installing this package:
|
|
|
|
|
|
|
|
1) Link your executable with -ltcmalloc
|
|
|
|
2) Run your executable with the HEAPCHECK environment var set:
|
|
|
|
$ HEAPCHECK=1 <path/to/binary> [binary args]
|
|
|
|
|
|
|
|
Other values for HEAPCHECK: normal (equivalent to "1"), strict, draconian
|
|
|
|
|
|
|
|
You can also use LD_PRELOAD to heap-check an executable that you
|
|
|
|
didn't compile.
|
|
|
|
|
|
|
|
IMPORTANT NOTE: pthreads handling is currently incomplete. Heap leak
|
|
|
|
checks will fail with bogus leaks if there are pthreads live at
|
|
|
|
construction or leak checking time. One solution, for global
|
|
|
|
heap-checking, is to make sure all threads but the main thread have
|
|
|
|
exited at program-end time. We hope (as of March 2005) to have a fix
|
|
|
|
soon.
|
2007-03-22 03:00:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
ENVIRONMENT VARIABLES
|
|
|
|
---------------------
|
2007-03-22 03:28:56 +00:00
|
|
|
The cpu profiler, heap checker, and heap profiler will lie dormant,
|
|
|
|
using no memory or CPU, until you turn them on. (Thus, there's no
|
|
|
|
harm in linking -lprofiler into every application, and also -ltcmalloc
|
|
|
|
assuming you're ok using the non-libc malloc library.)
|
|
|
|
|
|
|
|
The easiest way to turn them on is by setting the appropriate
|
|
|
|
environment variables. We have several variables that let you
|
|
|
|
enable/disable features as well as tweak parameters.
|
2007-03-22 03:00:33 +00:00
|
|
|
|
|
|
|
CPUPROFILE=<file> -- turns on cpu profiling and dumps data to this file.
|
|
|
|
PROFILESELECTED=1 -- if set, cpu-profiler will only profile regions of code
|
|
|
|
surrounded with ProfilerEnable()/ProfilerDisable().
|
2007-03-22 03:28:56 +00:00
|
|
|
PROFILEFREQUENCY=x-- how many interrupts/second the cpu-profiler samples.
|
|
|
|
|
|
|
|
HEAPPROFILE=<pre> -- turns on heap profiling and dumps data using this prefix
|
|
|
|
HEAPCHECK=<type> -- turns on heap checking with strictness 'type'
|
2007-03-22 03:00:33 +00:00
|
|
|
|
|
|
|
TCMALLOC_DEBUG=<level> -- the higher level, the more messages malloc emits
|
|
|
|
MALLOCSTATS=<level> -- prints memory-use stats at program-exit
|
|
|
|
|
2007-03-22 03:28:56 +00:00
|
|
|
---
|
|
|
|
16 March 2005
|