应用 Valgrind 发现 Linux 程序的内存问题

如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在。有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题。掌握 valgrind 的使用以及工作原理,能够有效地定位进而避免应用开发中的内存问题。

应用 Valgrind 发现 Linux 程序的内存问题





回页首


Valgrind 概述

体系结构

Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构如下图所示:


图 1 Valgrind 体系结构
Valgrind 体系结构

Valgrind包括如下一些工具:

  1. Memcheck。这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。
  2. Callgrind。它主要用来检查程序中函数调用过程中出现的问题。
  3. Cachegrind。它主要用来检查程序中缓存使用出现的问题。
  4. Helgrind。它主要用来检查多线程程序中出现的竞争问题。
  5. Massif。它主要用来检查程序中堆栈使用中出现的问题。
  6. Extension。可以利用core提供的功能,自己编写特定的内存调试工具。

Linux 程序内存空间布局

要发现Linux下的内存问题,首先一定要知道在Linux下,内存是如何被分配的?下图展示了一个典型的Linux C程序内存空间布局:


图 2: 典型内存空间布局
典型内存空间布局

一个典型的Linux C程序内存空间由如下几部分组成:

  • 代码段(.text)。这里存放的是CPU要执行的指令。代码段是可共享的,相同的代码在内存中只会有一个拷贝,同时这个段是只读的,防止程序由于错误而修改自身的指令。
  • 初始化数据段(.data)。这里存放的是程序中需要明确赋初始值的变量,例如位于所有函数之外的全局变量:int val=100。需要强调的是,以上两段都是位于程序的可执行文件中,内核在调用exec函数启动该程序时从源程序文件中读入。
  • 未初始化数据段(.bss)。位于这一段中的数据,内核在执行该程序前,将其初始化为0或者null。例如出现在任何函数之外的全局变量:int sum;
  • 堆(Heap)。这个段用于在程序中进行动态内存申请,例如经常用到的malloc,new系列函数就是从这个段中申请内存。
  • 栈(Stack)。函数中的局部变量以及在函数调用过程中产生的临时变量都保存在此段中。

内存检查原理

Memcheck检测内存问题的原理如下图所示:


图 3 内存检查原理
内存检查原理

Memcheck 能够检测出内存问题,关键在于其建立了两个全局表:





本文转自IBM Developerworks中国

      请点击此处查看全文

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,应用内存分析内存分析是两个不同的任务。 应用内存分析主要是通过查看应用程序内存使用情况,找出应用程序中存在的内存泄漏、内存溢出等问题,以优化应用程序的性能。可以使用工具valgrind、gdb等。 内存分析则是对整个系统的内存使用情况进行分析,找出哪些进程应用程序占用了过多的内存,从而优化系统的性能。可以使用工具如top、ps、free、vmstat、sar等。 下面简单介绍一些工具的使用方法: 1. valgrind:是一个开源的内存调试和性能分析工具,可以检测应用程序中的内存泄漏、越界访问、使用未初始化的内存问题。使用方法:valgrind [options] your_program 2. gdb:是一个强大的调试器,可以用来调试C、C++等程序。使用方法:gdb your_program,然后输入命令run启动程序,再输入命令break设置断点,用命令print查看变量的值。 3. top:是Linux系统中常用的进程监控工具,可以实时查看系统的进程和资源使用情况。使用方法:在终端中输入top命令即可。 4. ps:也是Linux系统中常用的进程查看工具,可以查看进程的PID、进程名、进程状态等信息。使用方法:在终端中输入ps命令即可。 5. free:可以查看系统的内存使用情况。使用方法:在终端中输入free命令即可。 6. vmstat:可以查看系统的虚拟内存使用情况。使用方法:在终端中输入vmstat命令即可。 7. sar:可以查看系统的CPU、内存、磁盘等资源使用情况。使用方法:在终端中输入sar命令即可。 以上是一些常用的Linux应用内存分析内存分析工具,使用这些工具可以更好地了解系统和应用程序内存使用情况,从而进行优化和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值