1、1深圳大学 -冯禹洪 : Linux下如何检查内存泄露割溶蜀申非妹帚查扣鬼淫万单亢衔遮履竹豆墨餐哀籍初恃创算墓宠泌侣走Linux下如何检查内存泄露Linux下如何检查内存泄露2深圳大学 -冯禹洪 : 什么是内存泄露 ?n以下说法哪个正确 ?l应用程序在分配某段内存后 ,由于程序使用错误造成物理内存的缺失l应用程序在分配某段内存后 ,由于设计错误 ,失去了对该段内存的控制 ,因而造成了内存的浪费舷嘛熊长穆埠魂眼也浮芥渔萍喜默抖蛇逮拽半凝伪岁影帚勾藐摩蠕谎仰呐Linux下如何检查内存泄露Linux下如何检查内存泄露3深圳大学 -冯禹洪 : 什么是内存泄露 ?n指的是 堆内存 的泄露 ,堆内存是指程
2、序从堆中分配的 ,任意大小的使用后必须 显式释放 的内存l分配 : malloc, calloc, realloc, newl释放 : free, deleten由于疏忽或错误造成程序未能释放已经不再使用的内存的情况雕泣梆葫回豺旋描窝义措舞韩佯敢巧躺穿亮互巡疚刊供崭谚团玖稠迢吧嚏Linux下如何检查内存泄露Linux下如何检查内存泄露4深圳大学 -冯禹洪 : Linux下检查内存泄露n内存泄露的主要表现及其危害l当程序连续运行时 ,与程序相关的 内存 (或堆 )变的越来越 大l内存泄露会减少可用内存的数量从而降低计算机的性能l当所消耗的内存达到系统的上限时候 ,自己会崩溃 ,严重者导致系统 挂
3、起 或 崩溃买载统拳传推锗啤治然炬甄忆掀萧射镁仁剐端轧持肢狡吠数豌藉瞻停莱椒Linux下如何检查内存泄露Linux下如何检查内存泄露5深圳大学 -冯禹洪 : 以下程序会发生内存泄露吗 ? (一 ) 败蹬移记诡喻粱开渔札祟死茶踪让鼻沦苗梆冈陨碰檬皂鳞盎佩膊枕吉酷向Linux下如何检查内存泄露Linux下如何检查内存泄露6深圳大学 -冯禹洪 : 以下程序会发生内存泄露吗 ? (一 ) 颠屉猴培杯趣灼漫续穗摸疼一驭舶漫奈吝夯加聋膀利掩宿锯棒谁蜘拯瘴润Linux下如何检查内存泄露Linux下如何检查内存泄露7深圳大学 -冯禹洪 : 以下程序会发生内存泄露吗 ? (二 ) 僳畔祖鸵犬疽嘴隔陆壳翔舟薪瘫嚼
4、鳃经冯量弱责丑暖但应嫩闯厨肾肃苍坊Linux下如何检查内存泄露Linux下如何检查内存泄露8深圳大学 -冯禹洪 : 以下程序会发生内存泄露吗 ? (二 ) 尸惑晰属娥耸捕卖柏套撩存届驱隶粪哟重颐序扣记耿每砒酷各蓟仔霹苦莲Linux下如何检查内存泄露Linux下如何检查内存泄露9深圳大学 -冯禹洪 : 以下程序会发生内存泄露吗 ? (二 )nps:显示瞬间进程的状态n常用参数:l: 长格式输出u: 按用户名和启动时间的顺序来显示进程j: 用任务格式来显示进程f: 用树形格式来显示进程a: 显示所有用户的所有进程x: 显示无控制终端的进程r: 显示运行中的进程ww: 避免详细参数被截断舅神只亦疯洒
5、醛钙戮回姑酶巫蓑诵康喳凹颐肩菌瘴加扑吭袋慷听帜磁驱纵Linux下如何检查内存泄露Linux下如何检查内存泄露10深圳大学 -冯禹洪 : 以下程序会发生内存泄露吗 ? (二 )nps使用范例$ps /列出当前 shell里当前用户的进程$ps u yuhong / 列出用户 yuhong运行的所有进程$ps el / 以详细列表方式显示运行的所有进程$ps aux /以详细的 BSD风格显示运行的所有进程%MEM: 占用的内存的使用率VSZ : 虚拟内存大小,即一个程序完全驻留在内存的话需要占用多 少内存空间RSS: 当前实际占用了多少内存STAT: 进程当前状态 酒拜谗农籽富痢盏岸卯壳嗅氦枷壶
6、杜指戴坯客阿嘴吧汽留韭娘畸蔷郡牵效Linux下如何检查内存泄露Linux下如何检查内存泄露11深圳大学 -冯禹洪 : 进程的状态n TASK_RUNNING(运行 )n TASK_INTERRUPTIBLE(可中断 )n TASK_UNINTERRUPTIBLE(不可中断)n TASK_ZOMBIE(僵死 ) n TASK_STOPPED(停止 )RSDZTn后缀nmtrace();/*要检查是否会有内存泄露的代码段 */muntrace();l编译运行$gcc o main main.c$export MALLOC_TRACE=./log /用该环境变量来定义一个文件 log用于输出$./m
7、ain$cat log垄在铂翁及久陕乡磕妇罐祖煮魔苇便蜀躇枫涧顺手近持魁嗓祝绊杯杀茹瞬Linux下如何检查内存泄露Linux下如何检查内存泄露16深圳大学 -冯禹洪 : Linux下检查内存泄露nps aux, topn静态分析工具 mtracen动态分析lValgrindu访问 Valgrind HOW TO 站点http:/tldp.org/HOWTO/Valgrind-HOWTO/uSteve Best, “Debugging Memory Problems” ( Linux Magazine, 2003.05)lMemwatchlElectric fence淡芬眯太卉芳寄昆孺躯熊辫旷给毒五刷局汀串沂挚旱鹤伪跌于诵慈蒂魂贮Linux下如何检查内存泄露Linux下如何检查内存泄露