Linux下如何检查内存泄漏精讲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
深圳大学-冯禹洪: yuhongf@szu.edu.cn
4
Linux下检查内存泄露
内存泄露的主要表现及其危害 当程序连续运行时,与程序相关的内存(或堆)变 的越来越大 内存泄露会减少可用内存的数量从而降低计算 机的性能 当所消耗的内存达到系统的上限时候,自己会崩 溃,严重者导致系统挂起或崩溃
http://blog.csdn.net/zjc156m/article/details/38920321 http://blog.csdn.net/adaptiver/article/details/7084364
深圳大学-冯禹洪: yuhongf@szu.edu.cn
13
以下程序会发生内存泄露吗? (二)
%MEM: 占用的内存的使用率 VSZ : 虚拟内存大小,即一个程序完全驻留在内存的话需要占用多 少内存空间 RSS: 当前实际占用了多少内存 STAT: 进程当前状态
深圳大学-冯禹洪: yuhongf@szu.edu.cn
11
进程的状态
TASK_RUNNING(运行) R TASK_INTERRUPTIBLE(可中断) S TASK_UNINTERRUPTIBLE(不可中断)D TASK_ZOMBIE(僵死) Z TASK_STOPPED(停止) T
top:按序显示正在执行的进程
$ top [-] [d delay] [p pid] [q] [c] [C] [S] [s] [i] [n iter] [b]
uptime行,系统重新引导至今的时间、用户数、负载平均数 第二行, 进程统计行:进程总数,sleeping, running, zombie和stopping进程数 第三行, CPU统计数据:用户、系统、nice以及空闲进程所 占CPU时间的百分比 第四行, 存储器的统计数据:可用内存总数、自由内 存、使用的内存、共享内存,用于缓存空间 第五行, 虚拟内存或交换区统计数据:可用总交换区、使 用的交换区、自由交换区以及缓存交换区 自此以下……,类似于PS格式
深圳大学-冯禹洪: yuhongf@szu.edu.cn
14
以下程序会发生内存泄露吗? (二)
深圳大学-冯禹洪: yuhongf@szu.edu.cn
15
Linux下检查内存泄露
ps –aux, top 静态分析工具 – mtrace 1. 在main.c代码中嵌入: #include <mcheck.h> … mtrace(); /*要检查是否会有内存泄露的代码段*/ muntrace(); 2. 编译运行 $gcc –o main main.c $export MALLOC_TRACE=./log //用该环境变量来定义一个文件log用于输出 $./main $cat log
8
以下程序会发生内存泄露吗? (二)
深圳大学-冯禹洪: yuhongf@szu.edu.cn
9
以下程序会发生内存泄露吗? (二)
ps:显示瞬间进程的状态 常用参数: l: 长格式输出 u: 按用户名和启动时间的顺序来显示进程 j: 用任务格式来显示进程 f: 用树形格式来显示进程 a: 显示所有用户的所有进程 x: 显示无控制终端的进程 r: 显示运行中的进程 ww: 避免详细参数被截断
深圳大学-冯禹洪: yuhongf@szu.edu.cn
10
以下程序会发生内存泄露吗? (二)
ps使用范例 $ps //列出当前shell里当前用户的进程 $ps –u yuhong //列出用户yuhong运行的所有进程 $ps –el //以详细列表方式显示运行的所有进程 $ps aux //以详细的BSD风格显示运行的所有进程
深圳大学-冯禹洪: yuhongf@szu.edu.cn
16
Log文件分析
深圳大学-冯禹洪: yuhongf@szu.edu.cn
ቤተ መጻሕፍቲ ባይዱ
17
Linux下检查内存泄露
ps –aux, top
静态分析工具 – mtrace
动态分析 Valgrind 访问 Valgrind HOW TO 站点 http://tldp.org/HOWTO/Valgrind-HOWTO/ Steve Best,“Debugging Memory Problems”(Linux Magazine,2003.05) Memwatch Electric fence
Linux下如何检测内存泄露和分析内存使用 基础题 (70分)
进阶题 (30分)
深圳大学-冯禹洪: yuhongf@szu.edu.cn
1
基础题
深圳大学-冯禹洪: yuhongf@szu.edu.cn
2
什么是内存泄露?
以下说法哪个正确? A. 应用程序在分配某段内存后,由于程序使用错 误造成物理内存的缺失 B. 应用程序在分配某段内存后,由于设计错误, 失去了对该段内存的控制,因而造成了内存的 浪费
深圳大学-冯禹洪: yuhongf@szu.edu.cn
5
以下程序会发生内存泄露吗? (一)
深圳大学-冯禹洪: yuhongf@szu.edu.cn
6
以下程序会发生内存泄露吗? (一)
深圳大学-冯禹洪: yuhongf@szu.edu.cn
7
以下程序会发生内存泄露吗? (二)
深圳大学-冯禹洪: yuhongf@szu.edu.cn
后缀 < (高优先级进程) N (低优先级进程) L (内存锁页) s (该进程为会话首 进程) + (前台进程) l (多线程进程)
如果有进程状态为Ssl?
深圳大学-冯禹洪: yuhongf@szu.edu.cn
12
以下程序会发生内存泄露吗? (二)
请认真了解相关参数的含义并分析
深圳大学-冯禹洪: yuhongf@szu.edu.cn
3
什么是内存泄露?
指的是堆内存的泄露,堆内存是指程序从堆中分配 的,任意大小的使用后必须显式释放的内存 分配: malloc, calloc, realloc, new 释放: free, delete
由于疏忽或错误造成程序未能释放已经不再使用 的内存的情况