讲师中心 微信公众号
AI工具推荐 视频效率加速

Linux如何查看进程的内存泄漏情况 调试工具

落瑶酱_7271

落瑶酱_7271

发布时间:2026-04-12 10:58:35

|

306人浏览过

|

来源于php中文网

原创

valgrind无法attach到运行中进程检测内存泄漏,必须从启动时介入;应使用--leak-check=full --show-leak-kinds=all --track-origins=yes重跑程序,结合/proc/pid/maps、malloc_stats()、ASan及语言特有工具(如Python的gc、Node.js的DevTools)综合诊断。

linux如何查看进程的内存泄漏情况 调试工具

用 valgrind --leak-check=full 检测运行中进程的内存泄漏

直接 attach 到已有进程不可行——valgrind 必须从程序启动时介入,否则无法监控 malloc/free 调用链。所以得重跑目标程序:

valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./my_program arg1 arg2
。关键参数里 --track-origins=yes 能定位未初始化内存的来源,对“间接泄漏”(比如指针拷贝后丢失原始地址)很有用;--show-leak-kinds=all 会区分 definitely lost、indirectly lost 等类型,别只盯着第一行 summary。

gdb + /proc/[pid]/maps 和 malloc_stats() 辅助判断异常增长

如果程序已长期运行且疑似泄漏,先看 RSS 是否持续上涨:ps -o pid,rss,comm -p [pid] 隔 30 秒跑两次对比。再进 /proc/[pid]/maps 查堆区(标有 [heap] 的行)大小是否扩大;若扩大但 gdb 里执行 call malloc_stats() 显示已分配字节数没变,大概率是 mmap 分配未释放(比如某些日志库或 jemalloc 的 arena 扩张),不是传统 malloc 泄漏。

  • 注意 malloc_stats() 只对 glibc 生效,musl 或自定义分配器不响应
  • /proc/[pid]/smaps 里的 Anonymous 和 MMUPageSize 字段能帮你区分是大页还是普通页泄漏

用 asan 编译 + 运行捕获释放后使用和越界——常被误认为泄漏

很多“内存持续增长”实际是 use-after-free 或缓冲区溢出导致的堆损坏,进而让后续 malloc 失败或行为异常。这时 valgrind 可能报一堆无关错误,不如换地址消毒器:

gcc -fsanitize=address -g my_program.c -o my_program
。运行时报错位置极精准,且附带堆栈和内存映射快照。但注意:

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • ASan 会显著拖慢速度(5–10 倍),不适合高吞吐服务实机压测
  • 必须用 ASan 编译的二进制,不能对现成 binary 注入
  • 报 heap-use-after-free 时,泄漏本身可能只是表象,根源在提前释放

Python/Node.js 等动态语言别硬套 C 工具——优先查引用计数和事件循环

对 python 进程,valgrind 会淹没在解释器内部调用里,真正有效的是:import gc; gc.set_debug(gc.DEBUG_STATS) 开启统计,或用 objgraph 绘制对象引用图;node 则用 node --inspect 启动后 Chrome DevTools 的 Memory 面板拍堆快照比对。这类环境里,“泄漏”往往源于闭包持有了不该持有的大对象、事件监听器未 remove、或定时器未 clear——工具只是辅助,得结合代码逻辑看生命周期。

真实场景里,泄漏常藏在第三方库的异步回调、信号处理函数或 fork 后的子进程资源继承中;valgrind 报的 still reachable 很多是库的缓存设计,不是 bug。动手前先确认:RSS 增长是否稳定、是否复现于最小可运行路径、有没有忽略 setrlimit 导致的 OOM 杀死伪装成泄漏。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2586

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4839

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

3467

2026.03.24

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

339

2026.04.23

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5187

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2288

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5187

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2288

2023.08.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn