Last active
June 20, 2017 01:15
-
-
Save siddontang/7fba3019caf90e448688146a87c67836 to your computer and use it in GitHub Desktop.
A systemtap script to check TiKV leaks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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