Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用

news2025/7/26 22:17:21

Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用

Linux 内核内存管理是构成整个内核性能和系统稳定性的基础,但这一子系统结构复杂,常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题,需要一套工具化、实操化的技术路径,也就是 ftrace / perf / crash 等核心分析工具。

本文系统分析这三者如何配合 Linux 内存管理系统使用,应对“分页、物理分配、SLAB、回收、OOM” 等典型场景,帮助实际工程师实现“知其然,知其所以然”。


在这里插入图片描述

一、ftrace: 函数级调用进程观测

完全适用场景:

  • 分析 do_page_fault() 触发流程
  • 查看 __alloc_pages() / kmalloc() 调用堆栈
  • 追踪 kswapd 的执行路径
  • 跟踪 tlb_flushzap_page_range 导致的异常性能开销

基本使用

# 启用 function_graph 跟踪
trace-cmd record -p function_graph -l do_page_fault
trace-cmd report | less

实战示例:深入 do_page_fault 缺页分析

在一次用户态访问大数组的性能瓶颈中,我们怀疑访问频繁缺页。

通过 ftrace:

trace-cmd record -p function_graph -l do_page_fault

然后在 report 中确认是否反复触发 handle_mm_fault()__do_fault()alloc_pages()

解析亮点:这是典型的“按需分配”场景,理解虚拟内存页未映射前会触发缺页中断,走 alloc_pages 去真正分配物理页。

面试官想听:你是否能清楚描述 page fault 的真正触发路径、每一级函数做了什么?是否能用 ftrace 工具亲自验证?

实战示例 2:跟踪 kswapd 中断页面回收路径

trace-cmd record -p function_graph -l shrink_node

在低内存触发 reclaim 时,你可以看到:
shrink_nodeshrink_lruvecshrink_inactive_listtry_to_unmaptlb_flush_mmu

解析亮点:能清楚看出内核是怎样在后台异步 reclaim 页的,这对分析页面回收的成本至关重要。


二、perf: 确实量化的性能分析器

完全适用场景

  • 分析 page fault 高变量原因
  • 分析 slab 分配热点(kmalloc 或 obj_cache 较热)
  • 分析 TLB 失效、cache miss 对性能影响
  • 分析 swap 带来的写回延迟

实战示例:判断 SLAB 是否频繁分配回收

在一次内核模块加载中频繁分配小块内存,怀疑 kmalloc 压力大。

perf top

结果发现 kmalloc/kmem_cache_alloc_node 占比很高。

进一步定位:

perf record -e kmem:kmalloc -a
perf report

解析亮点:你不仅能看到热点函数,还能通过事件采样定位“谁分配得多、在哪里分配”,这才是 perf 真正的价值。

实战示例 2:统计缺页中断和 TLB Miss

perf stat -e page-faults,dTLB-load-misses ./test_app
  • page-faults 很高,说明访问了大量未映射虚页。
  • dTLB-load-misses 很高,说明频繁跨页访存,可能是内存碎片严重。

面试官想听:你是否能通过 perf 读出 cache miss、TLB miss 与内存管理之间的性能因果链。


三、crash: 实时和崩溃后的内核内存透视

完全适用场景

  • 分析崩溃前 mm_struct / page / slab 状态
  • 分析正在运行进程内存分布
  • 分析不同 zone 的 free_area 分配情况
  • 分析 Page flags,定位 dirty/unreclaimable 页面

实战示例:OOM 发生时定位原因

系统触发 OOM,dmesg 中仅提示 “invoked oom-killer”,如何找出问题?

crash /usr/lib/debug/vmlinux /proc/kcore
ps -g                     # 查看谁被杀
kmem -s                  # 查看 slab 内存是否泄漏
kmem -z                  # 查看各 zone 空闲状态
vm                       # 检查进程虚拟内存布局

解析亮点:通过 crash 工具还原当时内存整体状态、对象分配情况,进而判断是否因 unreclaimable slab 太大而触发 OOM。

实战示例 2:分析 zone 空闲页不足的原因

kmem -z

输出:Zone Normal 空闲页数只有 4,而 highmem 有上千页,但系统使用默认 GFP_KERNEL(只能分配 Normal),因而无法满足大页请求。

面试官想听:你是否能理解 zone 的内存不可跨分配导致的“假空闲”,以及如何定位。


四、应用场景组合指南

情况一:内存清理性能差,系统卡顿

  1. perf stat -e page-faults,dTLB-load-misses
  2. 用 ftrace 追踪 do_page_fault/shrink_node
  3. crash 分析 zone 分配情况

情况二:内核 OOM Kill 不明原因

  1. dmesg 看 OOM 输出
  2. crash 分析 oom_score 对比
  3. 观察 swap + reclaim 操作是否不该触发

情况三:SLAB 分配压力大

  1. perf top 看 kmalloc / cache 热点
  2. crash kmem -s 观察小对象分配热点
  3. 分析 slab 是否无法回收,或分配深度

情况四:TLB/Cache 异常导致延迟跳变

  1. perf 分析 dTLB-load-misses, cache-misses
  2. ftrace 跟踪 tlb_flush_mmu()
  3. crash 查看 page.flags 是否为 dirty + active 状态,不能回收

第五、结论

Linux 内存管理子系统的处理路径、分配分析、回收策略和性能特性,都能通过 ftrace / perf / crash 做到系统化分析和跟踪。

从“规模规则 → 观察触发 → 分析排查”的线路出发,将理论知识、性能指标和实际调试完美一体化,才是真正理解 Linux MM 子系统的路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2406538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MLP实战二:MLP 实现图像数字多分类

任务 实战(二):MLP 实现图像多分类 基于 mnist 数据集,建立 mlp 模型,实现 0-9 数字的十分类 task: 1、实现 mnist 数据载入,可视化图形数字; 2、完成数据预处理:图像数据维度转换与…

【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器

从本章节开始,进入到函数有多个参数的情况,前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参,ECX是整型的第一个参数的寄存器,那么多个参数的情况下函数如何传参,下面展开介绍参数为整型时候的几种情…

PLC入门【4】基本指令2(SET RST)

04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…

react更新页面数据,操作页面,双向数据绑定

// 路由不是组件的直接跳转use client,useEffect,useRouter,需3个结合, use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…

Python异步编程:深入理解协程的原理与实践指南

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…

Ray框架:分布式AI训练与调参实践

Ray框架:分布式AI训练与调参实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 Ray框架:分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …

基于小程序老人监护管理系统源码数据库文档

摘 要 近年来,随着我国人口老龄化问题日益严重,独居和居住养老机构的的老年人数量越来越多。而随着老年人数量的逐步增长,随之而来的是日益突出的老年人问题,尤其是老年人的健康问题,尤其是老年人产生健康问题后&…

理想汽车5月交付40856辆,同比增长16.7%

6月1日,理想汽车官方宣布,5月交付新车40856辆,同比增长16.7%。截至2025年5月31日,理想汽车历史累计交付量为1301531辆。 官方表示,理想L系列智能焕新版在5月正式发布,全系产品力有显著的提升,每…

运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.

报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符,最后运行:npm run lint --fix

智警杯备赛--excel模块

数据透视与图表制作 创建步骤 创建 1.在Excel的插入或者数据标签页下找到数据透视表的按钮 2.将数据放进“请选择单元格区域“中,点击确定 这是最终结果,但是由于环境启不了,这里用的是自己的excel,真实的环境中的excel根据实训…

【多线程初阶】单例模式 指令重排序问题

文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…

基于Python的气象数据分析及可视化研究

目录 一.🦁前言二.🦁开源代码与组件使用情况说明三.🦁核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.🦁演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…

Pandas 可视化集成:数据科学家的高效绘图指南

为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…

新版NANO下载烧录过程

一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…

Axure Rp 11 安装、汉化、授权

Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接:https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…

中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点

中科院1区顶刊|IF14:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点 当下,免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入,我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…

作为点的对象CenterNet论文阅读

摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表,并对每一个位置进行分类。这种做法既浪费又低效,并且需要额外的后处理。在本文中,我们采取了不同的方法。我们将物体建模为单…

使用ch340继电器完成随机断电测试

前言 如图所示是市面上常见的OTA压测继电器,通过ch340串口模块完成对继电器的分路控制,这里我编写了一个脚本方便对4路继电器的控制,可以设置开启时间,关闭时间,复位等功能 软件界面 在设备管理器查看串口号后&…

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解

在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…

VSCode 没有添加Windows右键菜单

关键字:VSCode;Windows右键菜单;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意,实际使用的时候发现 VSCode 在 Windows 菜单栏…