人人范文网 范文大全

Linux下检查内存泄漏、系统性能的系列工具s

发布时间:2020-03-03 18:00:26 来源:范文大全 收藏本文 下载本文 手机版

Linux下检查内存泄漏、系统性能的系列工具

Pub Date:2008-02-16 10:45:34 Author: moon Click:164

1、定位内存泄漏问题

在我先前的博客文章中我介绍了如何在Windows .NET环境下如何定位内存泄漏问题,今天我就来介绍一个在Linux下定位此类问题的工具Valgrind和Callgrind,以及基于 Callgrind分析结果的GUI分析工具KCachegrind。Callgrind和KCachegrind在后面的专题讲。

首先介绍Valgrind,网址是:

Valgrind的Memcheck使用举例:

假定你当前的程序,myprog arg1 arg2

若使用Memcheck,命令如下:

valgrind --leak-check=yes myprog arg1 arg2

Memcheck是Valgrind的缺省工具。--leak-check选项将打开内存泄漏的详细检测器。

如果说你的内存泄漏错误代码,即myprog如下所示:

(1) #include

(2)

(3) void f(void)

(4) {

(5) int* x = malloc(10 * sizeof(int));

(6) x[10] = 0; // problem 1: heap block overrun

(7) } // problem 2: memory leak -- x not freed

(8)

(9) int main(void)

(10) {

(11) f();

(12) return 0;

(13) }

运行过程中,问题1的错误指示消息将会显示出来,主要是内存越界

==19182== Invalid write of size 4

==19182== at 0x804838F: f (example.c:6)

==19182== by 0x80483AB: main (example.c:11)

==19182== Addre 0x1BA45050 is 0 bytes after a block of size 40 alloc\'d

==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130)

==19182== by 0x8048385: f (example.c:5)

==19182== by 0x80483AB: main (example.c:11)

对于问题2,内存泄漏的消息如下所示:

==19182== 40 bytes in 1 blocks are definitely lost in lo record 1 of 1

==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130)

==19182== by 0x8048385: f (a.c:5)

==19182== by 0x80483AB: main (a.c:11)

怎么样?这里只是一个非常简单的例子,你不妨可以一试。

2、系统性能瓶颈的分析工具

这一节我们主要讲两个关联在一起的系统性能瓶颈的分析工具Callgrind和KCachegrind。这两个工具的主页是:

但文中的参数不对,你可以从Novel的FTP镜像服务器列表中灵活选择:

我使用的服务器参数是:mirrors.kernel.org,路径是/suse/i386/9.2

然后你在Yast中搜索kdesdk3-profile,安装即可。

或者你可以从Novell对Suse9.2的近期KDE应用的列表中下载RPM自行安装也可以

看 到kdesdk3-profile就是我们要找的,其描述如下:This package contains KCachegrind and the needed Calltree skin for Valgrind.You can profile your application with Valgrind using Calltree skin and display the result in KCachegrind to easily find bottlenecks.

直接下载地址是:ftp://ftp.suse.com/pub/suse/x86_64/supplementary/KDE/update_for_9.2/applications/.link/kdesdk3-profile.rpm

如果你自行手动编译安装,请参考:http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindInstallation

安装完后,下面我就来讲讲如何使用这两个工具:

首先用Callgrind来加载我的应用程序myprog, 命令是callgrind myprog,系统运行完后,或者自己使用Ctrl+C强制停止后,系统会生成一个文件,格式如下:callgrind.out.pid

Callgrind还用很多复杂的应用,可以参见:http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindUsage,这里不再详述。

下面介绍一下KCachegrind对输出的数据文件的分析图,下面是一个参考图,该图中包含三个子视图,Cost Type View, Call Graph View and Callee Map View。

在Callee Map View中,你能看到每一个函数的开销百分比包括Inclusive,即涵带子函数的总开销和Self,函数自己的开销,另外每一个函数的调用次数也列写在上面。

在Cost Type View中,每一个函数通过调用关系以模块的形式表现出来,往往在这里,通过显示的模块大小,并且结合Callee Map View中的函数Self开销,可以发现系统中的瓶颈函数。这点非常实用。

最后一个Call Graph View可以分析出函数的调用关系和流程,这是一个非常好的辅助工具,帮助你快速理解系统的工作流Work Flow。

如何检查制冷剂泄漏维护空调系统制冷功能

简单竞价系列六:配套系统和工具篇(上)

科学化竞价系列六:配套系统和工具篇(上)

Linux系统下的压片转换工具Mencoder应用[版]

黑马程序员C语言教程:linux系统下好用的文件恢复工具

Linux下检查内存泄漏、系统性能的系列工具s
《Linux下检查内存泄漏、系统性能的系列工具s.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
相关范文推荐
热门文章
    主题推荐
      点击下载本文文档