当前位置: 首页 > 软件库 > 其他开源 > Linux内核 >

bpftrace

Linux eBPF 的高级跟踪语言
授权协议 Apache-2.0
开发语言 C/C++
所属分类 其他开源、 Linux内核
软件类型 开源软件
地区 不详
投 递 者 常元章
操作系统 Linux
开源组织
适用人群 未知
 软件概览

bpftrace是一种用于Linux eBPF的高级跟踪语言。bpftrace使用LLVM作为后端,LLVM将脚本编译为BPF字节码,并利用BCC与Linux BPF系统进行交互。

# Files opened by process
bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm, str(args->filename)); }'

# Syscall count by program
bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }'

# Read bytes by process:
bpftrace -e 'tracepoint:syscalls:sys_exit_read /args->ret/ { @[comm] = sum(args->ret); }'

# Read size distribution by process:
bpftrace -e 'tracepoint:syscalls:sys_exit_read { @[comm] = hist(args->ret); }'

# Show per-second syscall rates:
bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @ = count(); } interval:s:1 { print(@); clear(@); }'

# Trace disk size by process
bpftrace -e 'tracepoint:block:block_rq_issue { printf("%d %s %d\n", pid, comm, args->bytes); }'

# Count page faults by process
bpftrace -e 'software:faults:1 { @[comm] = count(); }'

# Count LLC cache misses by process name and PID (uses PMCs):
bpftrace -e 'hardware:cache-misses:1000000 { @[comm, pid] = count(); }'

# Profile user-level stacks at 99 Hertz, for PID 189:
bpftrace -e 'profile:hz:99 /pid == 189/ { @[ustack] = count(); }'

# Files opened, for processes in the root cgroup-v2
bpftrace -e 'tracepoint:syscalls:sys_enter_openat /cgroup == cgroupid("/sys/fs/cgroup/unified/mycg")/ { printf("%s\n", str(args->filename)); }
  • bpftrace工具用法 单行命令工具: bpftrace -e 'program' bpftrace直接跟-e选项后面加单行命令,一些示例,比如: bpftrace -e 'BEGIN { printf("Hello world!\n"); }' bpftrace -e 'kprobe:vfs_read { @[tid] = count();}' bpftrace -e 'kprobe:vfs

  • bpftrace是一种基于eBPF(Extended BPF)技术的高级动态跟踪工具,它可以在Linux内核中实现轻量级、低性能开销的系统和应用程序监控和分析。bpftrace使用简单易懂的声明式语言进行脚本编写,可以快速创建和运行非常复杂的跟踪脚本,以便捕获并分析各种有关进程、文件系统、网络、内存、CPU等方面的事件和统计信息。 简要概括:Bpftrace 是一个动态的、可编程的跟踪工具,可以用

  • 前言 本文主要介绍bpftrace的使用及语法规则,主要内容来自于官网的文档,以及使用过程中遇到的一些问题;本文将不涉及ebpf概念、框架介绍等。 一、名词解释 术语 简介 BPF 伯克利数据包过滤器:最初开发用于优化数据包过滤器处理的核心技术(例如,tcpdump表达式) eBPF 增强型BPF:一种扩展BPF的内核技术,它可以在任何事件上执行更通用的程序,如bpftrace程序,eBPF通常被

  • bpftrace 使用笔记 bpftrace 是基于BPF和BCC的开源系统跟踪工具. bpftrace 自带了许多性能工具,同时还提供一个高级编程语言环境,用于创建自定义的工具. 一般Linux发行版都可直接通过安装包安装使用, 我自己的环境由于升级了KERNEL导致不能正常使用, 只能通过源码重新构建使用. 环境准备: $ uname -a Linux fc29 5.12.7-300.fc29

  • 0. bpftrace Alastair 与2016.12创建了bpftrace。bpftrace 是一款基于BPF和BCC的开源跟踪器。其自带了许多多性能工具和支持文档,同时提供了一个高级编程语言环境,可以用来创建强大的单行程序和小工具。 0.1 bpftrace组件 在安装bpftrace的时候,其会存在以下的目录树。其中提供了工具的文档、man帮助文档、示例文件等等。 ├── docs #

  • bpftrace一行教程 该教程通过12个简单小节帮助你了解bpftrace的使用。每一小节都是一行的命令,你可以立马运行并看到运行效果。该教程系列用来 介绍bpftrace的概念。关于bpftrace的完整参考,见bpftrace完整参考。 该教程贡献者是Brendan Gregg, Netflix (2018), 基于他的DTrace教程系列 [DTrace Tutorial](https:/

  • 1. 安装虚拟机 虽说centos是生产环境中的标准系统,但是从个人学习角度还是推荐ubuntu,各种软件安装包都能方便地找到,操作界面时也很漂亮。之前一直在centos7.6上折腾,自己升级内核版本,自己安装各种高版本依赖,有一段时间被折磨得放弃了很久。这次决定直接从最新版的ubuntu21.10开始学习,centos8可能也会好很多,只是我没有尝试过。 1.1. 下载镜像 选择下载最新的桌面版

 相关资料
  • 跟踪行为控制着 Entity Framework Core 是否会在其变更跟踪器里维持实体实例的信息。如果实体是被跟踪的,任何检测到的该实体的变更都将在 SaveChanges() 时持久化到数据库中。Entity Framework Core 还会对已跟踪的、之前已加载到 DbContext 实例中的查询和实体进行相互的导航属性装配。 提示 你可以在 GitHub 上查阅当前文章涉及的代码样例。

  • Trace 事件提供了一种机制,可以集中由 V8,Node 核心, 以及用户代码生成的跟踪信息。 启动 Node.js 应用时添加 --trace-events-enabled 标记,可以启用 Tracing. 可以通过在 --trace-event-categories 标记后跟一个用逗号分隔的类别名称列表, 来指定特定的跟踪记录集合。 node 和 v8 默认启用。 node --trace-

  • 跟踪配置指定了Envoy使用的HTTP跟踪器的全局设置。在服务的顶层配置上定义。未来,Envoy可能会支持其他跟踪器,但现在HTTP跟踪器是唯一支持的跟踪器。 { "http": { "driver": "{...}" } } http (optional, object) 提供HTTP跟踪器的配置。 driver (optional, object) 提供处理跟踪和创建span

  • 概述 分布式跟踪使开发人员可以在大型面向服务的体系结构中获得调用流的可视化。在理解序列化,并行性和延迟来源方面,这是非常宝贵的。Envoy支持系统范围与跟踪相关的三个功能: 请求ID生成:Envoy将在需要时生成UUID并填充x-request-id HTTP头。 应用程序可以转发x-request-id头以进行统一日志记录以及跟踪。 外部跟踪服务集成:Envoy支持可插入的外部跟踪可视化提供程序

  • Bug跟踪是一个宽泛的话题;贯穿本书会讨论此问题的各个方面。尽管这里我们要着重于配置和技术因素,但是首先要从一个策略问题开始:Bug跟踪系统中应该包含哪些信息? 术语Bug跟踪很有误导性。Bug跟踪系统也通常会用来跟踪哪些初始与结束状态不同,包含可选的中间状态,并在生命周期中积累信息的问题,例如新特性请求、一次性任务以及被动性的补丁。由于这些原因,Bug跟踪也被称为问题跟踪(issue track

  • 目前我们已经为Potion文件实现了简单的关键字和函数的语法高亮。 如果没有做上一章的练习,你需要回去完成。我将假设你做了练习。 事实上,你应该回去完成你跳过的任何练习。即使你觉得你不需要,为了更好的学习效果, 你都得把它们完成了。请在这一点上相信我。 高亮注释 接下来我们需要高亮Potion的一个重要组成部分——注释。 问题是,Potion的注释以#开头,而#并不在iskeyword里。 如果不

  • 我们甚至可以为Vim里面的语法高亮另开一本书了。 我们将在此讲解它最后的重要内容,然后继续讲别的东西。 如果你想要学到更多,去读:help syntax并阅读别人写的syntax文件。 高亮字符串 Potion,一如大多数编程语言,支持诸如"Hello,world!"的字符串字面量。 我们应该把这些高亮成字符串。为此我们将使用syntax region命令。 在你的Potion syntax文件中

  • 本章介绍如何使用Zipkin或Jaeger收集启用了Istio的应用程序的调用链信息。 完成本章后,你可以理解有关应用程序的所有假设以及如何使其参与跟踪,无论您使用何种语言/框架/平台构建应用程序。 BookInfo示例用来作为此任务的示例应用程序。 环境准备 参照安装指南的说明安装Istio。 如果您在安装过程中未启动Zipkin或Jaeger插件,则可以运行以下命令启动: 启动Zipkin: