From 1cf9c8f0043f8a29c383dcf779ef1d1678cbf3aa Mon Sep 17 00:00:00 2001 From: Sasha Goldshtein Date: Mon, 8 Feb 2016 04:04:15 -0800 Subject: [PATCH] Added man page --- man/man8/memleak.8 | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 man/man8/memleak.8 diff --git a/man/man8/memleak.8 b/man/man8/memleak.8 new file mode 100644 index 0000000..0f873fd --- /dev/null +++ b/man/man8/memleak.8 @@ -0,0 +1,84 @@ +.TH memleak 8 "2016-01-14" "USER COMMANDS" +.SH NAME +memleak \- Print a summary of outstanding allocations and their call stacks to detect memory leaks. Uses Linux eBPF/bcc. +.SH SYNOPSIS +.B memleak [-h] [-p PID] [-t] [-i INTERVAL] [-a] [-o OLDER] [-c COMMAND] +.SH 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 malloc and free from libc. +When tracing all processes, memleak instruments kmalloc and kfree. + +The stack depth is currently limited to 10 (+1 for the current instruction pointer). + +This currently only works on x86_64. Check for future versions. +.SH REQUIREMENTS +CONFIG_BPF and bcc. +.SH OPTIONS +.TP +\-h +Print usage message. +.TP +\-p PID +Trace this process ID only (filtered in-kernel). This traces malloc and free from libc. +.TP +\-t +Print a trace of all allocation and free requests and results. +.TP +\-i INTERVAL +Print a summary of oustanding allocations and their call stacks every INTERVAL seconds. +The default interval is 5 seconds. +.TP +\-a +Print a list of allocations that weren't freed (and their sizes) in addition to their call stacks. +.TP +\-o OLDER +Print only allocations older than OLDER milliseconds. Useful to remove false positives. +The default value is 500 milliseconds. +.TP +\-c COMMAND +Run the specified command and trace its allocations only. This traces malloc and free from libc. +.SH EXAMPLES +.TP +Print outstanding kernel allocation stacks every 3 seconds: +# +.B memleak -i 3 +.TP +Print user outstanding allocation stacks and allocation details for the process 1005: +# +.B memleak -p 1005 -a +.TP +Run ./allocs and print outstanding allocation stacks for that process: +# +.B memleak -c "./allocs" +.SH 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. + +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: + +# +.B perf probe '__kmalloc' + +# +.B perf stat -a -e 'probe:__kmalloc' -- sleep 10 +.SH SOURCE +This is from bcc. +.IP +https://github.com/iovisor/bcc +.PP +Also look in the bcc distribution for a companion _examples.txt file containing +example usage, output, and commentary for this tool. +.SH OS +Linux +.SH STABILITY +Unstable - in development. +.SH AUTHOR +Sasha Goldshtein -- 2.7.4