2025-02-15
bpftrace
是一个基于eBPF
(扩展的伯克利包过滤器)的高级跟踪工具,用于动态追踪Linux
系统的行为和性能。它允许用户通过简单的脚本语言编写跟踪程序,实时监控内核和用户空间的活动。
易用性:bpftrace
提供了类似AWK
的脚本语言,语法简洁,易于编写和调试。
强大功能:支持动态插桩(kprobes
、uprobes
)、tracepoints
、USDT
(用户静态定义跟踪点)等多种跟踪方式。
低开销:基于eBPF
技术,性能开销低,适合生产环境使用。
灵活性:可以监控内核函数、用户态函数、系统调用、网络事件等。
性能分析:查找系统瓶颈、分析函数调用耗时。
故障排查:跟踪特定进程或内核事件。
动态监控:实时监控系统行为,如文件访问、网络连接等。
sudo apt install -y bpftrace
ubuntu 24.04
)统计系统调用次数:
bpftrace -e 'tracepoint:syscalls:sys_enter_* { @[probe] = count(); }'
...
@[tracepoint:syscalls:sys_enter_getpeername]: 1
@[tracepoint:syscalls:sys_enter_symlink]: 1
@[tracepoint:syscalls:sys_enter_setpgid]: 1
@[tracepoint:syscalls:sys_enter_signalfd4]: 2
@[tracepoint:syscalls:sys_enter_utimensat]: 2
@[tracepoint:syscalls:sys_enter_geteuid]: 2
@[tracepoint:syscalls:sys_enter_getppid]: 2
跟踪文件打开事件,打印出每个进程打开的文件名
bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args->filename)); }'
systemd-oomd /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/mem..
systemd-oomd /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/mem..
systemd-oomd /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/mem..
systemd-oomd /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/mem..
统计进程的CPU
时间
bpftrace -e 'profile:hz:99 { @[comm] = count(); }'
@[systemd-oomd]: 2
@[zsh]: 3
@[bpftrace]: 4
@[gnome-shell]: 10
@[sshd]: 17
@[swapper/6]: 3271
更多例子可参考bpftrace github
希望上面的内容对你有所帮助。