eBPF入门笔记:通过bpftrace追踪内核

bpftrace安装

官方Install指南
centos repo

curl https://repos.baslab.org/rhel/7/bpftools/bpftools.repo --output /etc/yum.repos.d/bpftools.repo
yum install bpftrace bpftrace-tools bpftrace-doc bcc-static bcc-tools

追踪点查询

# 查询所有内核插桩和跟踪点
sudo bpftrace -l

# 使用通配符查询所有的系统调用跟踪点
sudo bpftrace -l 'tracepoint:syscalls:*'

# 使用通配符查询所有名字包含"execve"的跟踪点
sudo bpftrace -l '*execve*'

# -v查看详细参数
bpftrace -lv "tracepoint:syscalls:sys_enter_init_module"
tracepoint:syscalls:sys_enter_init_module
    int __syscall_nr
    void * umod
    unsigned long len
    const char * uargs

其它方式:

  1. 查询 /sys/kernel/debug 路径
    没有该路径,需要挂载 sudo mount -t debugfs debugfs /sys/kernel/debug
  2. perf list

追踪

单行执行

追踪execve 函数,输出 pid与父程序以及参数:

bpftrace -e 'tracepoint:syscalls:sys_enter_execve,tracepoint:syscalls:sys_enter_execveat { printf("%-6d %-8s", pid, comm); join(args->argv);}'
Attaching 2 probes...
180144 bash    groups
180145 bash    /usr/bin/locale-check C.UTF-8
180146 bash    locale
180148 bash    whoami
180150 bash    grep -q history -a

tools

https://github.com/iovisor/bpftrace#tools

执行bpftrace oomkill 追踪工具

执行 tail /dev/zero 触发oom (谨慎操作,先关闭swap swapoff -a

看到OOMKill输出:

# ./oom_kill.bt
Attaching 1 probe...
23:04:36 Triggered by PID 180101 ("tail"), OOM kill of PID 180101 ("tail"), 8218767 pages, loadavg: 0.40 0.14 0.05 2/494 180103
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容