ebpf 单行程序学习
ebpf 单行程序学习
背景
公司方神借给我一本:
《BPF之巅:洞悉linux系统和应用性能》纸质书
拿回家晚上在沙发上看了几天。
感觉书很厚看的不是很系统。
仅能凭自己的感觉总结一下这些天的读书感悟。
本来计划是2023年的春节 7 天长假系统的学习ebpf
但是因为学习Linux内核参数耽搁了。
工作后又各种忙和慌乱一直没有时间学习。
已经快跟上我立减肥flag倒的程度了。。。
一些基本理解
cbpf和ebpf的基本概念都不在阐述。
我理解ebpf之后其实核心的工具主要是bcc以及bpftrace
bcc是高手们自己利用python或者是go语言编写的工具集,用于实现特定的功能。
bpftrace 可以用于实现单行程序,更加符合unix do one thing do it well的哲学。
本次向简单理一下bpftrace的单行程序的理解。
便于后续的学习和使用。
bpftrace单行程序很类似于 awk 的语法。 通过attach 到不同的探针,跟踪点,来获取内核的核心信息
bpftrace的语法格式
注意:这些内容参照Brendan Greeg书中的附录部分。
bpftrace -e 'probe /filter/ {action;}'
通过这个命令就可以实现对特定探针的信息收集等工作。
注意使用之前需要先安装 bpftrace 可以在线安装: yum install bpftrace -y 即可。
注意 -e 表明是跟踪这个探针
-l 列出探针,不跟踪
-c 执行命令
bpftrace的部分举例
1. 跟踪新进程。包括进程参数
bpftrace -e 'tracepoint:syscalls:sys_enter_execve { join(args->argv);}'
2. 统计系统调用的数量
timeout 3 bpftrace -e 'tracepoint:raw_syscalls:sys_enter {@[pid,comm] = count();}'
注意这个命令可以统计最近三秒内的系统调用数量。如果不加时间可以使用 ctrl + c 的方式终止跟踪执行打印
3. bpftrace -e 'software:page-faults:1 {@[pid,comm] = count();}'
注意 如果不知道有哪一些probe 可以使用可以通过这个命令来获取
bpftrace -l 'software:*'
注意 原作者的附录里面page-fault 是错误的,需要改为复数形式。
4. 统计vfs调用
bpftrace -e 'kprobe:vfs_* {@[probe] = count();}'
注意这个是内核及的 kprobe kernel-probe
5. 统计io尺寸。可以验证数据库的块大小相关
bpftrace -e 't:block:block_rq_issue {@bytes = hist(args->bytes);}'
注意 t 是 tracepoint的缩写。
6. 按照pid和进程名统计
bpftrace -e 't:syscalls:sys_enter_connect {@[pid,comm] = count();}'
7. 直方图统计udp发送的字节数
timeout 3 bpftrace -e 'k:udp_sendmsg {@send_pytes = hist(arg2);}'
困了 今天到这。。
ebpf 单行程序学习的更多相关文章
- 通过反汇编C语言小程序学习Liunx汇编语言
大家好! 我是来自山东师范大学的吴乐. 今天在<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...
- 微信小程序 学习资料
微信小程序 学习资料 资料名称 网址 官方教程 https://developers.weixin.qq.com/miniprogram/dev/index.html?t=18110517
- Tuxedo安装、配置、以及演示样例程序 (学习网址)
Tuxedo安装.配置.以及演示样例程序 (学习网址): 1.http://liu9403.iteye.com/blog/1415684 2.http://www.cnblogs.com/fnng/a ...
- Java开发桌面程序学习(一)——JavaFx+Jfoenix初始以及搭建
Java开发桌面程序学习(一)--JavaFx+Jfoenix初始以及搭建 前言 想做一个Java的桌面程序,但是,使用原生的Swing感觉又十分麻烦,那个布局都是拿代码设置,看着十分的乱,偶然的情况 ...
- 【微信小程序学习笔记】入门与了解
[微信小程序学习笔记(一)] IDE 下载安装 下载地址 官方工具:https://mp.weixin.qq.com/debug/w … tml?t=1476434678461 下载可执行文件后,可按 ...
- 微信小程序学习笔记二 数据绑定 + 事件绑定
微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...
- 微信小程序学习笔记一 小程序介绍 & 前置知识
微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...
- 【C#】1.3 WPF应用程序学习要点
分类:C#.VS2015 创建日期:2016-06-14 使用教材:十二五国家级规划教材<C#程序设计及应用教程>(第3版) 一.要点概述 <C#程序设计及应用教程>(第3版) ...
- 微信小程序学习
官方网站 https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 项目结构介绍 -- MINA框架 https://mp.weixin.qq.com/ ...
- ios 程序学习
马上着手开发iOS应用程序:五.提交应用与寻找信息 2013-01-11 15:36 佚名 apple.com 我要评论(0) 字号:T | T 本文介绍了您已经学习完如何开发一个优秀的iOS应用之后 ...
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (46)-- 算法导论6.1 4题
四.假设一个最大堆的所有元素都不相同,那么该堆的最小元素应该位于哪里? 文心一言: 最大堆的最小元素位于堆的根结点.由于最大堆的性质,根结点是堆中所有元素的最大值,因此它也是堆中所有元素的最小值. 讯 ...
- .NET开源免费功能最全的商城项目
前言 今天给大家推荐一个功能丰富.免费.灵活且可定制的开源电子商务解决方案:nopCommerce.大家假如有商城需求可以直接使用该项目进行二次开发,省时省力. 项目介绍 nopCommerce在.N ...
- LeetCode 分治篇(50、17)
50. Pow(x, n) 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, ...
- SQL Server 时间算差值/常用函数
项目中需要计算使用年限,按月份算.刚开始踩了坑,不足1年应该按1年算.记录下~ 和当前时间比较,用DATEDIFF函数DateDiff(month,比较的时间,getdate())先算出月份,再除以1 ...
- GitLab--简单使用
1 创建项目组 项目组说明 Private 私有 只有所有者 组内成员或已分配的用户有查看权限(同GitHub收费版的私有仓库) Internal 内部 拥有GitLab账号的成员可以查看 无账号用户 ...
- AtCoder Beginner Contest 218 A~D
比赛链接:Here A - Weather Forecas 水题,判断 \(s[n - 1] = o\) 的话输出 YES B - qwerty 题意:给出 \((1,2,...,26)\) 的某个全 ...
- CodeForces-339B-Xenia and Ringroad (循环队列,水题)
Xenia lives in a city that has n houses built along the main ringroad. The ringroad houses are numbe ...
- nvm:npm的包管理器
NVM: npm的包管理器 其实许久前就像写这个模块了,只是之前使用后又搁置了,今天下项目时node版本不一致,才想起记录 nvm下载地址: Releases · coreybutler/nvm-wi ...
- 6、SpringBoot-mybatis分页实现pagehelper
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- [工程开发]当我们写一个tcp服务端的时候,我们在写什么?(一)
当我们写一个tcp服务器和客户端的时候,我们在写什么?(一) 本篇只聊服务端. 最近想搞一个服务器的协议,然后捏,简单搓个tcp服务器协议看看效果,主要是最近实在是没事干,闲得没事搓个服务器看看,当然 ...