《Linux下如何检查内存泄露.ppt》由会员分享,可在线阅读,更多相关《Linux下如何检查内存泄露.ppt(16页珍藏版)》请在三一办公上搜索。
1、Linux下如何检查内存泄露,什么是内存泄露?,以下说法哪个正确?应用程序在分配某段内存后,由于程序使用错误造成物理内存的缺失应用程序在分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费,什么是内存泄露?,指的是堆内存的泄露,堆内存是指程序从堆中分配的,任意大小的使用后必须显式释放的内存分配:malloc,calloc,realloc,new释放:free,delete由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,Linux下检查内存泄露,内存泄露的主要表现及其危害当程序连续运行时,与程序相关的内存(或堆)变的越来越大内存泄露会减少可用内存的数量从而降低计算机
2、的性能当所消耗的内存达到系统的上限时候,自己会崩溃,严重者导致系统挂起或崩溃,以下程序会发生内存泄露吗?(一),以下程序会发生内存泄露吗?(一),以下程序会发生内存泄露吗?(二),以下程序会发生内存泄露吗?(二),以下程序会发生内存泄露吗?(二),ps:显示瞬间进程的状态常用参数:l:长格式输出u:按用户名和启动时间的顺序来显示进程j:用任务格式来显示进程f:用树形格式来显示进程a:显示所有用户的所有进程x:显示无控制终端的进程r:显示运行中的进程ww:避免详细参数被截断,以下程序会发生内存泄露吗?(二),ps使用范例$ps/列出当前shell里当前用户的进程$ps u yuhong/列出用户
3、yuhong运行的所有进程$ps el/以详细列表方式显示运行的所有进程$ps aux/以详细的BSD风格显示运行的所有进程,%MEM:占用的内存的使用率VSZ:虚拟内存大小,即一个程序完全驻留在内存的话需要占用多 少内存空间RSS:当前实际占用了多少内存STAT:进程当前状态,进程的状态,TASK_RUNNING(运行)TASK_INTERRUPTIBLE(可中断)TASK_UNINTERRUPTIBLE(不可中断)TASK_ZOMBIE(僵死)TASK_STOPPED(停止),R,S,D,Z,T,后缀(高优先级进程)N(低优先级进程)L(内存锁页)s(该进程为会话首进程)+(前台进程)l(
4、多线程进程),如果有进程状态为Ssl?,以下程序会发生内存泄露吗?(二),以下程序会发生内存泄露吗?(二),top:按序显示正在执行的进程$top-d delay p pid q c C S s i n iter buptime行,系统重新引导至今的时间、用户数、负载平均数第二行,进程统计行:进程总数,sleeping,running,zombie和stopping进程数第三行,CPU统计数据:用户、系统、nice以及空闲进程所 占CPU时间的百分比第四行,存储器的统计数据:可用内存总数、自由内 存、使用的内存、共享内存,用于缓存空间第五行,虚拟内存或交换区统计数据:可用总交换区、使 用的交换
5、区、自由交换区以及缓存交换区自此以下,类似于PS格式,以下程序会发生内存泄露吗?(二),Linux下检查内存泄露,ps aux,top静态分析工具 mtrace在main.c代码中嵌入:#include mtrace();/*要检查是否会有内存泄露的代码段*/muntrace();编译运行$gcc o main main.c$export MALLOC_TRACE=./log/用该环境变量来定义一个文件log用于输出$./main$cat log,Linux下检查内存泄露,ps aux,top静态分析工具 mtrace动态分析Valgrind访问 Valgrind HOW TO 站点 http:/tldp.org/HOWTO/Valgrind-HOWTO/Steve Best,“Debugging Memory Problems”(Linux Magazine,2003.05)MemwatchElectric fence,