监控malloc时brk系统调用
我们都知道malloc底层是调用brk系统调用实现的,但是不是每次malloc都会调用brk。我们来使用bpftrace验证以下。
写一个malloc的程序。
#include "stdio.h" #include <stdlib.h> int main() { void *p; p = malloc(5000); printf("%p\n", p); p = malloc(8); printf("%p\n", p); p = malloc(8); printf("%p\n", p); p = malloc(8); printf("%p\n", p); p = malloc(8); printf("%p\n", p); p = malloc(8); printf("%p\n", p); return 0; }
我们调用6次malloc。
使用bpftrace监控brk系统调用。
bpftrace -e 'tracepoint:syscalls:sys_enter_brk { printf("%s %p \n", comm, args->brk); }'
run
main (nil) main (nil) main 0x557e0eef9000
bpftrace只抓到3次,而且前两次的参数都是nil。