C++性能测试工具gprof和gperftools基础

一、程序的性能及测试

软件的性能指的是软件所能满足的性能指标,主要包括压力测试指标和负载测试指标。软件的性能测试是通过模拟实际生产的业务压力和具体环境组合,来测试系统的性能是否达到软件设计的性能指标。在c++的应用程序里,天然的要求就是高性能,这也是对c++性能测试的一个痛点。目前常见的大型软件,用cc++实现的非常多,比如数据中的MySql,内存型数据库Redis,微信和QQ,操作系统等等。
掌握常见的c++性能测试工具,对于cc++开发人员来说,是一项必备的技能。它能够帮助开发者,快速发现大型应用程序中的一些常见的错误和异常并对设计要求的指标给出一个明确的对比。例如在cc++中,内存泄露和内存溢出是一个非常经典的错误,它会让应用程序直接崩溃。内存泄露和内存溢出是不同的,前者指内存出于各种原因没有回收使用,而后者指软件需要内存但因为各种原因导致无法分配出来。而常见的工具者最能解决这些问题,另外包括内存越界、CPU占用等者最可以清晰明了的得到相关的信息。

二、gprof和gperftools的说明

一般来说,在cc++中,常用的性能测试工具中,gprof和gperftools是经常被提到和使用的。gprof是GCC自带的性能测试工具,而gperftools是Google的一个性能测试工具。下面对二者进行基本的说明。
1、gprof
GNU profile,是GNU编译器工具包的一种性能分析工具,它能够准备的对函数调用的时间、次数以及相应关系进行描述和说明,还可以通过使用gprof2dot这个工具把结果直接展示为图形状态。它可以分为以下几步进行使用:
a、在编译测试程序时打开编译开关 -pg
b、运行程序并正常运行完成
c、使用gprof命令来分析运行生成的gmon.out,生成性能测试结果的报告
2、gperftools
gperftools包括四个工具,即CPU profiler (CPU运行时间探测分析)、Heap Checker(内存检测) 、Heap Profiler(内存监控器) 及tcmalloc(内存管理库)。对CPU和内存泄露的检测一直是CC++的一个痛点,Google提供这再从个方面的工具真是太及时了。
这个软件需要安装下载,同样在编译时也要链接到相关的库,会在后面的文章中专门分析说明。需要说明的是在这个工具中提供了对不间断运行的应用程序(比如后台服务)的测试,可以通过信号指令来启动或者关闭相关的测试过程,如"kill -s SIGUSR1 进程ID".

三、应用

这里给出基本的例程:
1、gprof

//testgprof.cpp
#include<iostream>

int main(void)
{
    std::cout << "start test------!" << std::endl;

    int64_t d = 0;

    for (int i = 0; i < 1000000000; i++)
    {
        d += i;
    }
    std::cout << "result is:" << d << std::endl;

    std::cout << "end test!" << std::endl;

    return 0;
}

//编译
g++  -pg testgprof.cpp  -o tgprof
//运行这个命令后可以在屏幕上看到相关的分析
gprof tgprof gmon.out

当然此处也可以使用上面提到的gprof2dot显示,但需要安装一系列的依赖库和相关软件。

2、gperftools

void TestLeakMem()
{
    int* p = new int[100];
    char* tmp = new char[100];

    delete[] p;
    //delete [] tmp;
}
int main(void)
{
    TestLeakMem();
    return 0;
}

//编译
g++ -O0 -g testmem.cpp -ltcmalloc -o testmem

在上面编译完成后,就会有一个报告说明有内存泄露,并指明泄露的内存大小数量。当然,这个工具还有更细粒度的内存检测控制,这个在后面会继续分析说明。

四、总结

这里只是对这再从个工具一个基础的介绍和学习,在后面会展开详细的说明,俗话说得好“工欲善其事,必先利其器”。会用工具,用好工具,对排疑解难,提高性能,有着重要的好处。
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>