- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2014Linux操作系统期末考试_答题一(凌玉)
深圳大学考试答题纸
专业 计算机技术(春) 成绩
课程名称、代码 142201013117 年级
姓名 凌玉 学 号 20144312004 时间 2014 年 1 月
详细得分:
计分项 一(5分) 二(10分) 三(70分) 四(15分) 迟交(-5分) 总分 得分 评分人
Linux下如何检查内存泄露
《Linux操作系统》专题技术报告
作者:凌玉
指导老师:冯禹洪
目录
1. 引言 (5分) 4
2. 创建登录用户(10分) 4
3. 内存泄露检查(70分) 5
3.1. 使用常用命令分析确定内存泄露 (20分) 5
3.2. 使用静态分析方法确定内存泄露 (20分) 9
3.3. 使用动态分析方法确定内存泄露(30分) 12
4. 分析使用给定函数是否存在内存泄露风险的问题(15分) 14
引言 (5分)
内存泄露指的是应用程序在分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄露会减少可用内存的数量从而降低计算机的性能。而且当所消耗的内存达到系统的上限时,程序自己会崩溃,严重者甚至会导致系统挂起或崩溃。因此,掌握有效检查发现内存泄露问题对构建稳定的软件有很重要的作用。
Linux下检查内存泄露相关的技术将有3方面:
使用相关命令,如ps, top等;
静态分析,如使用工具mtrace; 以及
动态分析,如使用valgrind或者memwatch等工具等。
创建登录用户(10分)
创建用户lingyu20144312004
/etc/passw 截图
/etc/shadow 截图
运行whoami 截屏
内存泄露检查(70分)
使用常用命令分析确定内存泄露 (20分)
使用ps 和 top命令静态分析程序1和程序2
分析程序1
程序1 greeting.c
源码分析:greeting函数创建nsize个字符空间,如果字符个数小于12个则打印”out of memory” 并返回,退出greeting函数,如果nsize不小于12,则把hello world 字符拷贝到p所指的新内存空间,
并释放p所指内存空间。
main 函数是一个死循环,不断地调用greeting函数
程序运动结果
运行ps aux命令
运行top命令
对多次运动ps aux命令后,收集到的运行时数据分析, greeting进程(PID = 2685)是一个可中断的正在运动的前台进程(SR+),分析VSZ列(虚拟内存大小)RSS列(当前实例占用的内存)
VSZ和RSS列的值在不断地增长,一次比一次大,说明程序一直在申请内存空间,但一直没有释放内存空间。此程序有内存泄露的嫌疑。
再运行top命令,查看greeting进程内存使用情况,如图中红框列,内存使用在不断地增加
根据这个结果,来分析源程序
Greeting函数一开始就先申请nsize个字符空间,然后再对nsize作判断,如果小于12就打印并返回,
只有在nsize的值不小于12时才会执行free函数释放内存空间。但main函数死循环调用greeting函数,并且每次传入参数都是11,永远都不会进入free(p)代码行。随着时间的推移,此程序会申请的内存越来越多,一直都不释放,所以可以肯定这程序是内存泄露的。
分析程序2
程序2
Ps aux 截图
Top命令截图
从ps/top命令收集到的数据来看,每次收集到的内存使用数据都是一样的,所以程序2是没有内存泄露的。
使用静态分析方法确定内存泄露 (20分)
使用matrace工具对源代码进行内存泄露分析和定位内存泄露的代码位置
在 greeting_matrce.c代码中嵌入:
#include mcheck.h
…
mtrace();
/*要检查是否会有内存泄露的代码段*/
muntrace();
编译运行
$gcc –o greeting_matrce greeting_mtrace.c
$export MALLOC_TRACE=./log
//用该环境变量来定义一个文件log用于输出
加入mtrace代码的程序1
Mtrace 日志(mtrace greeting_mtrace t.log)
如上图所示,mtrace检测区间在程序申请内存之前和内存释放之后,从代码分析,如果程序正确使用内存的话,trace log记录的应是申请与释放配对出现。查看tr
文档评论(0)