手写生产级eBPF内存检测工具

哈喽,我是子牙老师,一个手写过操作系统、编程语言、Java虚拟机、docker、Ubuntu系统,玩透Windows内核、Linux内核...立志一统计算机底层培训的硬核男人

把课程《手写gdb调试器》交付完后,一直在玩eBPF,发现真的很好玩!更重要的,eBPF非常有前途!

ChatGPT说:eBPF 是当今Linux系统中最具工程价值的技术之一,它让普通工程师第一次具备"安全进入内核、直接观测生产系统本质"的能力。

刚开始玩eBPF的时候,为了节省脑力,准备找资料学习,发现:1、只有eBPF基础视频,版本比较老,也不完整,基于新版本Linux内核+libbpf库+bpftool根本跑不起来;2、计算机是应用类学科,学了要会用啊,要拿来解决问题,应用类的视频教程,空白,书倒是有,但是一点实战经验都没有,看书完全没概念;3、eBPF的底层原理,几乎没人教......总之,只能靠自学了

我学计算机不喜欢啃概念,我喜欢基于实战去学习。在真实的生产环境中,服务器出问题几乎是常态,而内存问题又是最常见、最难排查的一类,于是就想到基于eBPF写一个生产级的内存使用追踪+内存泄漏检测工具。

下图就是全部的内存问题,感兴趣的小伙伴也可以自己试着写工具去监测及解决

BTW,CPU问题、网络问题、IO问题、容器问题,在服务器上都是非常普遍的,后续会写对应的工具去监测,如果你感兴趣,欢迎关注公众号【硬核子牙】,第一时间获得文章推送

主方向有了,怎么做到呢?作为一个计算机底层功力如此深厚的硬核男人,加上ChatGPT的助力,轻松拿下!不得不说,我现在的功力,有ChatGPT加持,我真膨胀的有一种"无所不能"的赶脚

顺便提一下,AI时代,大家都很焦虑,怕被淘汰,吴军(书《数学之美》的作者)的一段话,分享给大家:AI时代,赢家是能最大化使用AI的人,比如我这样的;不会被淘汰的:底层人,比如超市监督员、机器看护人员,因为雇佣他们的成本比用AI还要低;淘汰的主流人群,中产,就是月薪1w-5w之间的这波人。

所以中产们,别再焦虑了,除了往上走,基础打好,能够最大化使用AI,别无选择了。如果还有一个的话,还有一个,转入新时代:AI。但是新时代需要的人并不多,其实未来,绝大多数coder,还是聚集在旧时代

给大家看下我写的工具的git日志。关注公众号【硬核子牙】回复【内存工具】免费获取工具

这个工具,主要解决:1、监控内存分配+内存释放;2、检测内存泄漏+内存泄漏调用栈查看;3、可以通过attach配置工具监控的进程。这些功能,基于最新eBPF特性实现:uprobe/uretprobe+kprobe+BTF+CO-RE+skeleton+Ringbuffer+libdw+libbpf

来看一个具体的案例吧:内存使用追踪+内存泄漏检测

一、在所有内存分配与释放函数上插桩,使用uprobe+uretprobe+kprobe

二、查看是否插桩成功

三、运行一个存在内存泄漏的程序,attach它

四、运行程序,查看内存使用日志及内存泄漏日志

内存泄漏日志,精准显示调用栈,来看下有问题的代码是不是在malloc.c的第9行,还真是!

酷不酷?你想不想自己也写一个这样的工具?你想不想自己也有写工具的能力?可以先加班主任微信,元旦后招生,教你如何使用eBPF写工具,让你成为一个能造工具的人,而不只是一个只能使用工具的人!

如果你想更多了解我,欢迎去我公众号【硬核子牙】看我之前的文章及我的奋斗历程。白手起家程序员的职场心得,应该会对你有很大启发

若有收获,就点个赞吧

相关推荐
顺风尿一寸2 小时前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode9 小时前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫11 小时前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao2 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐3 天前
Linux内存扩容指南
linux
zylyehuo4 天前
Linux 彻底且安全地删除文件
linux
用户805533698034 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297914 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
Web3探索者6 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo6 天前
Linux系统中网线与USB网络共享冲突
linux