Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bcc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
bcc
Commits
9389ab48
Commit
9389ab48
authored
Jan 18, 2017
by
Maria Kacik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[memleak] add parameter for specifying object to load malloc/free from
parent
3cc4c0a2
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
15 additions
and
8 deletions
+15
-8
man/man8/memleak.8
man/man8/memleak.8
+4
-1
tools/memleak.py
tools/memleak.py
+6
-3
tools/memleak_example.txt
tools/memleak_example.txt
+5
-4
No files found.
man/man8/memleak.8
View file @
9389ab48
...
...
@@ -3,7 +3,7 @@
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] [-a] [-o OLDER] [-c COMMAND] [-s SAMPLE_RATE]
[-T TOP] [-z MIN_SIZE] [-Z MAX_SIZE] [INTERVAL] [COUNT]
[-T TOP] [-z MIN_SIZE] [-Z MAX_SIZE] [
-O OBJ] [
INTERVAL] [COUNT]
.SH DESCRIPTION
memleak traces and matches memory allocation and deallocation requests, and
collects call stacks for each allocation. memleak can then print a summary
...
...
@@ -53,6 +53,9 @@ 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.
.TP
\-O OBJ
Attach to malloc and free in specified object instead of resolving libc. Ignored when kernel allocations are profiled.
.TP
INTERVAL
Print a summary of oustanding allocations and their call stacks every INTERVAL seconds.
The default interval is 5 seconds.
...
...
tools/memleak.py
View file @
9389ab48
...
...
@@ -135,6 +135,8 @@ parser.add_argument("-z", "--min-size", type=int,
help
=
"capture only allocations larger than this size"
)
parser
.
add_argument
(
"-Z"
,
"--max-size"
,
type
=
int
,
help
=
"capture only allocations smaller than this size"
)
parser
.
add_argument
(
"-O"
,
"--obj"
,
type
=
str
,
default
=
"c"
,
help
=
"attach to malloc & free in the specified object"
)
args
=
parser
.
parse_args
()
...
...
@@ -149,6 +151,7 @@ num_prints = args.count
top_stacks
=
args
.
top
min_size
=
args
.
min_size
max_size
=
args
.
max_size
obj
=
args
.
obj
if
min_size
is
not
None
and
max_size
is
not
None
and
min_size
>
max_size
:
print
(
"min_size (-z) can't be greater than max_size (-Z)"
)
...
...
@@ -251,11 +254,11 @@ bpf_program = BPF(text=bpf_source)
if
not
kernel_trace
:
print
(
"Attaching to malloc and free in pid %d, Ctrl+C to quit."
%
pid
)
bpf_program
.
attach_uprobe
(
name
=
"c"
,
sym
=
"malloc"
,
bpf_program
.
attach_uprobe
(
name
=
obj
,
sym
=
"malloc"
,
fn_name
=
"alloc_enter"
,
pid
=
pid
)
bpf_program
.
attach_uretprobe
(
name
=
"c"
,
sym
=
"malloc"
,
bpf_program
.
attach_uretprobe
(
name
=
obj
,
sym
=
"malloc"
,
fn_name
=
"alloc_exit"
,
pid
=
pid
)
bpf_program
.
attach_uprobe
(
name
=
"c"
,
sym
=
"free"
,
bpf_program
.
attach_uprobe
(
name
=
obj
,
sym
=
"free"
,
fn_name
=
"free_enter"
,
pid
=
pid
)
else
:
print
(
"Attaching to kmalloc and kfree, Ctrl+C to quit."
)
...
...
tools/memleak_example.txt
View file @
9389ab48
...
...
@@ -150,14 +150,16 @@ of the sampling rate applied.
USAGE message:
# ./memleak -h
usage: memleak [-h] [-p PID] [-t] [-a] [-o OLDER] [-c COMMAND]
[-s SAMPLE_RATE] [-d STACK_DEPTH] [-T TOP]
usage: memleak.py [-h] [-p PID] [-t] [-a] [-o OLDER] [-c COMMAND]
[-s SAMPLE_RATE] [-T TOP] [-z MIN_SIZE] [-Z MAX_SIZE]
[-O OBJ]
[interval] [count]
Trace outstanding memory allocations that weren't freed.
Supports both user-mode allocations made with malloc/free and kernel-mode
allocations made with kmalloc/kfree.
positional arguments:
interval interval in seconds to print outstanding allocations
count number of times to print the report before exiting
...
...
@@ -175,13 +177,12 @@ optional arguments:
execute and trace the specified command
-s SAMPLE_RATE, --sample-rate SAMPLE_RATE
sample every N-th allocation to decrease the overhead
-d STACK_DEPTH, --stack_depth STACK_DEPTH
maximum stack depth to capture
-T TOP, --top TOP display only this many top allocating stacks (by size)
-z MIN_SIZE, --min-size MIN_SIZE
capture only allocations larger than this size
-Z MAX_SIZE, --max-size MAX_SIZE
capture only allocations smaller than this size
-O OBJ, --obj OBJ attach to malloc & free in the specified object
EXAMPLES:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment