监控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。

 

posted @ 2024-01-28 10:58  半山随笔  阅读(24)  评论(0编辑  收藏  举报