Man page - memleak-bpfcc(8)
Packages contains this manual
- swapin-bpfcc(8)
- uthreads(8)
- btrfsdist-bpfcc(8)
- memleak-bpfcc(8)
- tcpconnlat-bpfcc(8)
- killsnoop-bpfcc(8)
- dbstat-bpfcc(8)
- cpuunclaimed-bpfcc(8)
- pythonflow-bpfcc(8)
- pythoncalls-bpfcc(8)
- vfsstat-bpfcc(8)
- filelife-bpfcc(8)
- gethostlatency-bpfcc(8)
- reset-trace-bpfcc(8)
- tcptop-bpfcc(8)
- nodegc-bpfcc(8)
- javagc-bpfcc(8)
- biosnoop-bpfcc(8)
- dcstat-bpfcc(8)
- tclcalls-bpfcc(8)
- shmsnoop-bpfcc(8)
- funccount-bpfcc(8)
- filegone-bpfcc(8)
- threadsnoop-bpfcc(8)
- filetop-bpfcc(8)
- rdmaucma-bpfcc(8)
- rubycalls-bpfcc(8)
- tcpsynbl-bpfcc(8)
- f2fsslower-bpfcc(8)
- tcpaccept-bpfcc(8)
- offcputime-bpfcc(8)
- execsnoop-bpfcc(8)
- cachestat-bpfcc(8)
- zfsdist-bpfcc(8)
- javathreads-bpfcc(8)
- tcptracer-bpfcc(8)
- mountsnoop-bpfcc(8)
- tplist-bpfcc(8)
- solisten-bpfcc(8)
- ttysnoop-bpfcc(8)
- biolatency-bpfcc(8)
- hardirqs-bpfcc(8)
- biotop-bpfcc(8)
- cachetop-bpfcc(8)
- phpstat-bpfcc(8)
- tcpconnect-bpfcc(8)
- rubyobjnew-bpfcc(8)
- btrfsslower-bpfcc(8)
- syncsnoop-bpfcc(8)
- syscount-bpfcc(8)
- slabratetop-bpfcc(8)
- funcslower-bpfcc(8)
- tcpstates-bpfcc(8)
- llcstat-bpfcc(8)
- javaobjnew-bpfcc(8)
- capable-bpfcc(8)
- wqlat-bpfcc(8)
- exitsnoop-bpfcc(8)
- tcpretrans-bpfcc(8)
- nodestat-bpfcc(8)
- rubyflow-bpfcc(8)
- ucalls(8)
- biolatpcts-bpfcc(8)
- argdist-bpfcc(8)
- uflow(8)
- perlflow-bpfcc(8)
- vfscount-bpfcc(8)
- pythonstat-bpfcc(8)
- ext4slower-bpfcc(8)
- tclobjnew-bpfcc(8)
- funclatency-bpfcc(8)
- compactsnoop-bpfcc(8)
- tcprtt-bpfcc(8)
- tcpdrop-bpfcc(8)
- dbslower-bpfcc(8)
- dcsnoop-bpfcc(8)
- statsnoop-bpfcc(8)
- sslsniff-bpfcc(8)
- runqlen-bpfcc(8)
- runqlat-bpfcc(8)
- netqtop-bpfcc(8)
- bitesize-bpfcc(8)
- biopattern-bpfcc(8)
- offwaketime-bpfcc(8)
- uobjnew(8)
- trace-bpfcc(8)
- zfsslower-bpfcc(8)
- softirqs-bpfcc(8)
- phpcalls-bpfcc(8)
- funcinterval-bpfcc(8)
- drsnoop-bpfcc(8)
- ustat(8)
- readahead-bpfcc(8)
- cthreads-bpfcc(8)
- javacalls-bpfcc(8)
- stackcount-bpfcc(8)
- tcplife-bpfcc(8)
- fileslower-bpfcc(8)
- javaflow-bpfcc(8)
- perlcalls-bpfcc(8)
- ksnoop-bpfcc(8)
- kvmexit-bpfcc(8)
- runqslower-bpfcc(8)
- tclflow-bpfcc(8)
- ext4dist-bpfcc(8)
- inject-bpfcc(8)
- klockstat-bpfcc(8)
- pythongc-bpfcc(8)
- tcpsubnet-bpfcc(8)
- opensnoop-bpfcc(8)
- tclstat-bpfcc(8)
- ppchcalls-bpfcc(8)
- tcpcong-bpfcc(8)
- spfdsnoop-bpfcc(8)
- bpflist-bpfcc(8)
- javastat-bpfcc(8)
- pidpersec-bpfcc(8)
- phpflow-bpfcc(8)
- rubystat-bpfcc(8)
- deadlock-bpfcc(8)
- virtiostat-bpfcc(8)
- cpudist-bpfcc(8)
- nfsdist-bpfcc(8)
- mdflush-bpfcc(8)
- oomkill-bpfcc(8)
- wakeuptime-bpfcc(8)
- xfsslower-bpfcc(8)
- bindsnoop-bpfcc(8)
- criticalstat-bpfcc(8)
- profile-bpfcc(8)
- rubygc-bpfcc(8)
- nfsslower-bpfcc(8)
- xfsdist-bpfcc(8)
- dirtop-bpfcc(8)
- perlstat-bpfcc(8)
- sofdsnoop-bpfcc(8)
- cobjnew-bpfcc(8)
- bashreadline-bpfcc(8)
- ugc(8)
- mysqld_qslower-bpfcc(8)
apt-get install bpfcc-tools
Manual
memleak
NAMESYNOPSIS
DESCRIPTION
REQUIREMENTS
OPTIONS
EXAMPLES
OVERHEAD
SOURCE
OS
STABILITY
AUTHOR
NAME
memleak - Print a summary of outstanding allocations and their call stacks to detect memory leaks. Uses Linux eBPF/bcc.
SYNOPSIS
memleak [-h] [-p PID] [-t] [-a] [-o OLDER] [-c COMMAND] [--combined-only] [--wa-missing-free] [-s SAMPLE_RATE] [-T TOP] [-z MIN_SIZE] [-Z MAX_SIZE] [-O OBJ] [INTERVAL] [COUNT]
DESCRIPTION
memleak traces and matches memory allocation and deallocation requests, and collects call stacks for each allocation. memleak can then print a summary of which call stacks performed allocations that werenāt subsequently freed.
When tracing a specific process, memleak instruments a list of allocation functions from libc, specifically: malloc, calloc, realloc, posix_memalign, valloc, memalign, pvalloc, aligned_alloc, and free. When tracing all processes, memleak instruments kmalloc/kfree, kmem_cache_alloc/kmem_cache_free, and also page allocations made by get_free_pages/free_pages.
memleak may introduce significant overhead when tracing processes that allocate and free many blocks very quickly. See the OVERHEAD section below.
This tool only works on Linux 4.6+. Stack traces are obtained using the new BPF_STACK_TRACEā APIs. For kernels older than 4.6, see the version under tools/old. Kernel memory allocations are intercepted through tracepoints, which are available on Linux 4.7+.
REQUIREMENTS
CONFIG_BPF and bcc.
OPTIONS
|
-h |
Print usage message. |
||
|
-p PID |
Trace this process ID only (filtered in-kernel). This traces libc allocator. |
||
|
-t |
Print a trace of all allocation and free requests and results. |
||
|
-a |
Print a list of allocations that werenāt freed (and their sizes) in addition to their call stacks. |
-o OLDER
Print only allocations older than OLDER milliseconds. Useful to remove false positives. The default value is 500 milliseconds.
-c COMMAND
Run the specified command and trace its allocations only. This traces libc allocator.
--combined-only
Use statistics precalculated in kernel space. Amount of data to be pulled from kernel significantly decreases, at the cost of losing capabilities of time-based false positives filtering (-o).
--wa-missing-free
Make up the action of free to alleviate misjudgments when free is missing.
-s SAMPLE_RATE
Record roughly every SAMPLE_RATE-th allocation to reduce overhead.
|
-t TOP |
Print only the top TOP stacks (sorted by size). The default value is 10. |
-z MIN_SIZE
Capture only allocations that are larger than or equal to MIN_SIZE bytes.
-Z MAX_SIZE
Capture only allocations that are smaller than or equal to MAX_SIZE bytes.
|
-O OBJ |
Attach to allocation functions in specified object instead of resolving libc. Ignored when kernel allocations are profiled. |
INTERVAL
Print a summary of outstanding allocations and their call stacks every INTERVAL seconds. The default interval is 5 seconds.
|
COUNT |
Print the outstanding allocations summary COUNT times and then exit. |
EXAMPLES
Print outstanding kernel allocation stacks every 3 seconds:
# memleak 3
Print user outstanding
allocation stacks and allocation details for the
process 1005:
# memleak -p 1005 -a
Sample roughly every 5th
allocation (Ė20%) of the call stacks and print
the top 5
stacks 10 times before quitting. # memleak -s 5 --top=5 10
Run ./allocs and print outstanding allocation stacks for that process:
# memleak -c ./allocs
Capture only allocations between 16 and 32 bytes in size:
# memleak -z 16 -Z 32
OVERHEAD
memleak can have significant overhead if the target process or kernel performs allocations at a very high rate. Pathological cases may exhibit up to 100x degradation in running time. Most of the time, however, memleak shouldnāt cause a significant slowdown. You can use the -s switch to reduce the overhead further by capturing only every N-th allocation. The -z and -Z switches can also reduce overhead by capturing only allocations of specific sizes.
Additionally, option --combined-only saves processing time by reusing already calculated allocation statistics from kernel. Itās faster, but lacks information about particular allocations.
Also, option --wa-missing-free makes memleak more accuracy in the complicated environment.
To determine the rate at which your application is calling malloc/free, or the rate at which your kernel is calling kmalloc/kfree, place a probe with perf and collect statistics. For example, to determine how many calls to __kmalloc are placed in a typical period of 10 seconds:
# perf probe ā__kmallocā
# perf stat -a -e āprobe:__kmallocā -- sleep 10
SOURCE
This is from bcc.
https://github.com/iovisor/bcc
Also look in the bcc distribution for a companion _examples.txt file containing example usage, output, and commentary for this tool.
OS
Linux
STABILITY
Unstable - in development.
AUTHOR
Sasha Goldshtein