手写生产级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 小时前
DockerCompoe 部署注册中心Nacos 一键部署 单机+Mysql8
java·linux·运维·spring boot·缓存·docker·doc
FIT2CLOUD飞致云2 小时前
操作教程丨通过1Panel轻松安装和管理MySQL开源数据库
linux·运维·服务器·mysql·开源·1panel
全栈游侠2 小时前
GT2933触摸驱动分析 -中断处理
linux·笔记
QT 小鲜肉2 小时前
【Linux命令大全】001.文件管理之lsattr命令(实操篇)
linux·运维·服务器·笔记·elasticsearch
石像鬼₧魂石3 小时前
SQLMap 注入完整操作流程(新手通关手册)
linux·人工智能·windows·学习
郝学胜-神的一滴3 小时前
Linux线程错误调试指南:从原理到实践
linux·服务器·开发语言·c++·程序人生
秋深枫叶红3 小时前
嵌入式第四十篇——网络编程
linux·网络·学习
m0_555762903 小时前
linux开发——网络配置(含VM网络配置)
linux·运维·网络
KingRumn3 小时前
玩转DBus命令行工具之gdbus使用
linux·算法