bpftrace探测程序

发布时间:2026/10/3 20:06:10
bpftrace探测程序 bpftrace 简单示例前提安装 bpftrace内核开启 BPF 支持需要 root 运行sudo bpftrace xxx.bt 语法bpftrace 是类 awk 语言probe /filter/ { action }示例1探测某个进程的 open 系统调用最常用入门文件名trace_open.bt#!/usr/bin/env bpftrace // 探针syscall:sys_openat现代linux打开文件用openat // 过滤只看 PID1234 的进程把1234换成你要探测的程序pid tracepoint:syscalls:sys_enter_openat /pid 1234/ { printf(PID:%d 打开文件: %s\n, pid, str(args-filename)); }运行sudo bpftrace trace_open.bt然后启动你的目标程序它每次调用 openat 打开文件就会打印路径。如果想按进程名过滤比如探测nginxtracepoint:syscalls:sys_enter_openat /comm nginx/ { printf(PID:%d comm:%s file:%s\n, pid, comm, str(args-filename)); }示例2kprobe 捕获函数调用探测程序内部函数适合用户态/内核函数假设你要探测目标程序/bin/bash里的readline用户态函数用户态函数需要符号 文件名trace_readline.bt#!/usr/bin/env bpftrace uprobe:/bin/bash:readline { printf(bash readline() called, pid:%d\n, pid); }运行sudo bpftrace trace_readline.bt新开 bash敲回车就会触发。uprobe 用户态探针kprobe 内核函数探针。示例3统计进程调用 read 的耗时带时间tracepoint:syscalls:sys_enter_read /pid 1234/ { start[tid] nsecs; } tracepoint:syscalls:sys_exit_read /pid 1234 start[tid]/ { $dur nsecs - start[tid]; printf(read 耗时: %d ns\n, $dur); delete(start[tid]); }直接在命令行单行运行不用写文件快速试sudo bpftrace -e tracepoint:syscalls:sys_enter_openat /comm cat/ { printf(file: %s\n, str(args-filename)); }另开终端执行cat /etc/passwd你就能看到打印。参考链接 0voice · GitHub

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询