Linux进程内存泄漏排查:valgrind与mtrace的应用

千明酱_2097

千明酱_2097

2026-06-10

627人浏览

原创

应根据场景选择工具:valgrind适合开发测试阶段深度诊断,mtrace适合轻量、低侵入的运行时跟踪。valgrind通过动态插桩精准定位泄漏文件行号与调用栈,需-g编译且禁高优化;mtrace为glibc内置轻量方案,仅需两行代码加环境变量,生成文本日志解析泄漏点。

linux进程内存泄漏排查:valgrind与mtrace的应用

Linux进程内存泄漏排查,关键在于匹配问题场景选对工具。Valgrind适合开发测试阶段做深度诊断,mtrace更适合轻量、低侵入的运行时跟踪,尤其在资源受限或需长期驻留的环境中。

Valgrind:精准定位泄漏源头

Valgrind的memcheck工具通过动态二进制插桩,在程序运行时实时监控每一块堆内存的分配、释放、读写状态。它能报告泄漏发生的具体文件、行号、调用栈,甚至指出“definitely lost”(确定泄漏)和“possibly lost”(潜在泄漏)的区别。

  • 编译时必须加 -g 保留调试信息,避免使用 -O2 及以上优化,否则行号可能错乱或内联导致栈丢失
  • 常用命令:valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./myapp
  • 输出中重点关注 "definitely lost" 条目——这是最可靠的泄漏证据;"still reachable" 通常是正常未释放的全局缓存,不一定是问题
  • 对多线程程序同样有效,但会显著拖慢运行速度(通常慢10–30倍),不适合线上实时服务

mtrace:简单、零依赖、低开销

mtrace是Glibc自带的轻量方案,不改变程序执行逻辑,只在malloc/free等调用点埋入日志记录钩子。它生成纯文本日志,体积小、易导出,特别适合嵌入式设备或生产环境短期采样。

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载
  • 代码中只需两处改动:包含 #include ,并在main开头调用 mtrace(),结尾调用 muntrace()
  • 运行前设置环境变量:export MALLOC_TRACE=./mtrace.log;也可在代码中用 setenv("MALLOC_TRACE", "path", 1) 动态指定
  • 程序退出后,用 mtrace ./myapp ./mtrace.log 解析日志——未配对的 +(malloc)即为泄漏点,附带地址与大小
  • 不支持检测越界、use-after-free等高级问题,但对“忘了free”这类基础泄漏反应直接、无误报

怎么选?看这三点

不是越重的工具越好,而是看你要回答什么问题:

  • 刚写完模块,想确认有没有漏掉free? → 用mtrace,5分钟接入,日志一目了然
  • 进程RSS持续上涨,但不确定是哪段代码? → 先用top/ps锁定PID,再用Valgrind复现并精确定位
  • 跑在ARM嵌入式设备上,不能装额外软件? → mtrace是唯一选择,Glibc默认带,无需交叉编译Valgrind

配合使用效果更好

实际排查中,建议先用mtrace快速扫一遍,确认是否存在基础泄漏;若有,再用Valgrind深入分析调用路径和上下文。例如:mtrace发现某次malloc没被free,Valgrind就能告诉你这次malloc是在config_load()里被调用的,而该函数在异常分支中跳过了清理逻辑——二者结合,问题闭环就完整了。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux valgrind

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3990

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3413

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2573

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6250

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5902

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3453

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2945

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3159

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习