当前位置:首页 > 报告详情

1.基于 eBPF 的内存泄露(增长)通用分析方法.pptx

上传人: 张** 编号:161312 2024-05-05 16页 2.03MB

1、首届中国首届中国eBPFeBPF研讨会研讨会基于基于 eBPF 的的内存泄露(增长)通用分析方法内存泄露(增长)通用分析方法主讲人:邢孟棒主讲人:邢孟棒2022-11-12首届中国首届中国eBPFeBPF研讨会研讨会目录目录背景内存泄露(增长)的分类与误区传统分析工具 gdb、Valgrind基于 eBPF 的通用分析方法内存分配火焰图(改进版)缺页异常火焰图(改进版)首届中国首届中国eBPFeBPF研讨会研讨会背景背景问题:某私有化环境中 mysql-proxy 内存占用量持续增长,出现 OOM 现象,影响业务方正常使用痛点:传统分析工具(gdb、Valgrind 等)效率相对较低,投入 3

2、 人力超过一周时间后折中解决诉求:一种相对通用的内存泄露(增长)分析方法,更高效地定位发生泄露的代码路径,减少人力投入成本首届中国首届中国eBPFeBPF研讨会研讨会内存泄露的分类内存泄露的分类内核内存泄露应用程序内存泄露 堆内存(Heap)内存映射区(Mappings)虚拟内存泄露 持续分配虚拟内存,但未分配、映射实际的物理内存物理内存泄露 持续分配、映射实际的物理内存,且一直未释放首届中国首届中国eBPFeBPF研讨会研讨会内存泄露的误区内存泄露的误区混淆内存泄露与内存增长虚拟内存泄露未引起关注如果进程仅调用 malloc()或 mmap()而不去写入这些地址,即不去给它分配物理内存,是否

3、就不用担心内存泄漏了?首届中国首届中国eBPFeBPF研讨会研讨会传统分析工具传统分析工具 gdb&Valgrindgdb 干扰程序运行,不适合生产环境 直接定位比较困难,且要求对源码有一定了解Valgrind 需要重启程序,且作为 Valgrind 子进程运行 替代默认的 malloc/free 等分配函数,程序运行速度减慢 2030 倍 不能很好的支持 tcmalloc、jemalloc 分配器首届中国首届中国eBPFeBPF研讨会研讨会基于基于 eBPF 的通用分析方法的通用分析方法内存分配器行为分析(glibc、jemalloc 等)应用视角,重点关注应用程序内存分配的代码路径 动态追

4、踪内存分配相关函数,统计未释放内存分配的调用栈与总字节数量,形成 eBPF 分析工具 mallocstacks缺页异常事件分析 内核视角,关注的是首次写入触发缺页异常的代码路径,而不是触发内存分配的代码路径 追踪缺页异常事件,统计未释放物理内存的调用栈与总页面数量,形成 eBPF 分析工具 pgfaultstacks首届中国首届中国eBPFeBPF研讨会研讨会内存分配器行为分析内存分配器行为分析现有 eBPF 分析工具功能对比memleak不支持生成折叠栈,文本形式输出不太直观。可追踪 malloc 及其变体 cmalloc、realloc 等,且支持 malloc/free 抵消。mallo

5、cstacks现有 eBPF 工具仅追踪 malloc,不包括变体 cmalloc、realloc 等。可生成折叠栈,但不支持 malloc/free 抵消,全量 malloc 总量太大。首届中国首届中国eBPFeBPF研讨会研讨会内存分配器行为分析内存分配器行为分析定制内存泄露(增长)分析工具 mallocstacks借鉴现有 BCC 工具 memleak、mallocstacks,支持生成折叠栈,可生成全量内存分配火焰图、未释放内存分配火焰图借助 uprobes 动态追踪 malloc(以及变体 cmalloc、realloc)、free./mallocstacks.py-O/lib64/

6、libjemalloc.so.4.5.0-p$(pgrep-nx mysql-proxy)-f 60 unfreed_malloc.stacks./flamegraph.pl-color=mem-title=Malloc Flame Graph-countname=bytes unfreed_malloc.svg首届中国首届中国eBPFeBPF研讨会研讨会全量内存分配火焰图全量内存分配火焰图mallocstacks-p$(pgrep-nx mysql-proxy)-af 60追踪 mysql-proxy 进程所有 malloc 及其变体调用 60s,并生

word格式文档无特别注明外均可编辑修改,预览文件经过压缩,下载原文更清晰!
三个皮匠报告文库所有资源均是客户上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作商用。
本文主要介绍了基于 eBPF 的内存泄露(增长)通用分析方法。在私有化环境中,MySQL-Proxy 内存占用持续增长,导致 OOM 现象,影响业务正常使用。传统分析工具如 gdb 和 Valgrind 效率较低,且在生产环境中使用受限。因此,提出了基于 eBPF 的通用分析方法。该方法包括内存分配器行为分析和缺页异常事件分析。内存分配器行为分析关注应用程序内存分配的代码路径,而缺页异常事件分析关注内核视角下首次写入触发缺页异常的代码路径。通过定制内存泄露分析工具 mallocstacks 和 pgfaultstacks,可以生成折叠栈的全量内存分配火焰图和未释放内存分配火焰图。实验结果显示,相比传统工具,基于 eBPF 的方法在数据量和需要关注的关键代码路径上都有显著减少。
"eBPF技术如何高效诊断内存泄漏?" "如何利用火焰图定位内存泄露代码?" "改进的缺页异常分析工具如何助力内存泄露检测?"
客服
商务合作
小程序
服务号
折叠