Skip to content

Instantly share code, notes, and snippets.

@siddontang
Last active June 20, 2017 01:15
Show Gist options
  • Save siddontang/7fba3019caf90e448688146a87c67836 to your computer and use it in GitHub Desktop.
Save siddontang/7fba3019caf90e448688146a87c67836 to your computer and use it in GitHub Desktop.
A systemtap script to check TiKV leaks
global ptr2bt
global ptr2size
global bt_stats
global quit
probe begin {
warn("Start tracing. Wait for 5 sec to complete.\n")
}
// Use tikv binary
probe process("/data1/deploy1/bin/tikv-server").function("malloc").return {
if (pid() == target()) {
if (quit) {
foreach (bt in bt_stats) {
print_ustack(bt)
printf("\t%d\n", @sum(bt_stats[bt]))
}
exit()
} else {
// printf("malloc: %p (bytes %d)\n", $return, $size)
ptr = $return
bt = ubacktrace()
ptr2bt[ptr] = bt
ptr2size[ptr] = $size
bt_stats[bt] <<< $size
}
}
}
probe process("/data1/deploy1/bin/tikv-server").function("free") {
if (pid() == target()) {
// printf("free: %p\n", $ptr)
ptr = $ptr
bt = ptr2bt[ptr]
delete ptr2bt[ptr]
bytes = ptr2size[ptr]
delete ptr2size[ptr]
bt_stats[bt] <<< -bytes
if (@sum(bt_stats[bt]) == 0) {
delete bt_stats[bt]
}
}
}
probe timer.s(5) {
printf("begin to quit\n")
quit = 1
delete ptr2bt
delete ptr2size
}
// How to use:
// sudo stap -DSTP_OVERLOAD_THRESHOLD=50000000000 -DMAXMAPENTRIES=1024000 -DMAXACTION=50000 -DMAXSKIPPED=5000 --suppress-handler-errors ./leaks.stp -x pid
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment