2014Linux操作系统期末考试_答题一(凌玉).docVIP

2014Linux操作系统期末考试_答题一(凌玉).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档