ebpf检测Linux系统要来了

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

前些日子不是做了个课程《手写生产级ebpf内存监测工具》吗,招生结束后,我一边交付课程,一边在思考大家在学习或工作过程中,还有哪些需求没有被满足,我试着用ebpf去解决

这我还没想出来多少,报名的小伙伴,还有咨询课程的小伙伴,提供了一堆的需求,我整理了一下,多达17个!我突然意识到:我不应该把这个工具局限于只做内存监测,而是定位于Linux系统检测更合适!

看到这些需求,只有一个感觉:兴奋!

以我这急性子,马上开干!花了两天时间,终于把第一个需求干出来了:支持监测fork创建的子进程的内存泄漏问题。没干之前,觉得应该挺简单吧,开干以后,小样还挺复杂的

总结一下实现监测fork子进程内存泄漏,折腾了哪些:

  1. Ringbuffer是生产-消费模型,进程间消费会相互影响,要解决

  2. 如何解决呢?实现本地化日志功能

  3. 本地化日志需要用到数据结构,得引入数据结构库

  4. 底层数据模块更改,相关的命令都要更改:log、leak、stack

  5. 加入异步日志同步模块,解决手动去ebpf端拉日志的麻烦

  6. fork会产生子进程,找准时机attach,找准时机创建dwfl对象

  7. fork会导致父进程内存变动,需要在合适时机更新dwfl对象

  8. 解决父子进程符号化调用栈的问题

  9. 支持无限fork

看下代码日志(写完的那一刻,太痛快了!)

看着自己写的工具越来越强大,很开心!人生的很多可能性,都是在不经意间来到的。我今天做了这样一件事情,不知未来会给我带来怎样的机缘呢?

那些觉得AI无所不能从而放弃自我成长的人,不妨看看借助AI能不能把这个需求搞出来

AI只是工具,牛叉的人,配上AI赋能,才会更强大!修内功,才能成为技术大佬,才能最大化使用AI这个强大的工具!

接下来展示给大家看一下工具的监测效果

看到一层fork,这是代码。父进程申请101B的内存不释放,子进程申请128B的内存不释放

开始用我写的工具yatrace监测。监测到两条malloc日志

run这一步的背后,实际上做了很多很多事情!比如:自动attach子进程、自动创建dwfl对象与子进程关联、刷新父进程的dwfl对象,这几件事情都不是简单就能做到的!

再来看看内存泄漏日志,精确到具体代码位置

肿么样?还是很酷的吧!这些都是基于ebpf技术实现的!我演示的一切,都是课程《手写生产级ebpf内存监测工具》中的

再来看无限fork,这个更酷!与刚刚代码不同的是,子进程又创建了子进程

看下监测到的日志。内存泄漏日志我就不贴图了

如果你:听说过eBPF很厉害,却陷在零散资料里无法系统入门;kprobe/tracepoint语法背了不少,实战中却连简单的追踪工具都写不出来;线上服务CPU突然飙升?不知道根源在哪,只能盲目重启;IO延迟居高不下?靠监控面板猜问题,找不到核心瓶颈;会用tcpdump、bpftrace排查网络问题,却想自定义监测维度时毫无头绪;想靠技术突破薪资瓶颈,却缺一门能落地的工程化实战技能...那你一定要了解这门课

ebpf几乎可以做一切你想做的检测:用户态检测+内核态检测。用户态包括检测:系统内存、自实现内存池、glibc路、MySQL、Redis、jvm、docker、自编写的程序...内核态包括检测:CPU、调度、上下文、内存、网络socket、网络协议、IO...你能想到的,它几乎都能做,非常有前途的技术!

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

若有收获,就点个赞吧

相关推荐
↘"LYong2 小时前
Centos升级Redis(7.4.1 ---> 7.4.6)
linux·redis
bedynamic2 小时前
Ubuntu虚拟机磁盘空间不足解决方案
linux·ubuntu
我不是稻草人2 小时前
Centos共享Mac文件
linux·macos·centos
乌萨奇也要立志学C++2 小时前
【Linux】线程同步 条件变量精讲 + 生产者消费者模型完整实现
java·linux·运维
澄澈青空~2 小时前
病毒木马侵入系统内核的底层运作机理
java·linux·服务器
ieayoio2 小时前
snipaste截图工具在linux下xfce中无法点击右键菜单
linux·ubuntu·截图·snipaste·托盘·xfce·xubuntu
奔跑的web.3 小时前
TypeScript 接口(interface)完全指南:语法、特性与实战技巧
linux·ubuntu·typescript
AI+程序员在路上3 小时前
嵌入式Linux中添加ftp服务器的简易方法
linux·运维·服务器
煤球王子3 小时前
浅学进程间通信3(消息队列)
linux