`
灵动的水
  • 浏览: 194665 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

学习使用开源软件google-perftools(分析c/c++程序的占用cpu和内存性能))

 
阅读更多
安装:++++++++++++++

TCMalloc (google-perftools) 是用于优化C++写的多线程应用,比glibc 2.3的malloc快。这个模块可以用来让MySQL在高并发下内存占用更加稳定。

下载二个软件地址:
google-perftools:http://code.google.com/p/google-perftools/

libunwind:http://download.savannah.gnu.org/releases/libunwind/

安装步骤:

1.64 位操作系统请先安装 libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
#tar zxvf libunwind-0.9.tar.gz
#cd libunwind-0.99

#./configure
#make
#make install

2.安装google-perftools:
#tar zxvf google-perftools-1.6.tar.gz

#cd google-perftools-1.6

#./configure
#make
#make install

3.运行以下二行命令

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig

4.修改MySQL启动脚本(根据你的MySQL安装位置而定):

vi /usr/local/mysql/bin/mysqld_safe
在# executing mysqld_safe的下一行,加上:
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

保存后退出,然后重启MySQL服务器。


5.使用验证lsof命令查看tcmalloc是否起效:
如lsof没有装,可yum安装
/usr/sbin/lsof -n | grep tcmalloc
如果发现以下信息,说明tcmalloc已经起效:
  mysqld    10847   mysql  mem       REG        8,5  1203756   20484960 /usr/local/lib/libtcmalloc.so.0.0.0



===========================
64位机器安装方法:
tar -zxvf libunwind-0.99-beta.tar.gz
cd libunwind-0.99-beta
CFLAGS=-fPIC ./configure --prefix=/usr
make CFLAGS=-fPIC
make CFLAGS=-fPIC install

tar -zxvf google-perftools-1.8.3.tar.gz
cd google-perftools-1.8.3
./configure --prefix=/usr
make
make install

echo "/usr/lib" > /etc/ld.so.conf.d/usr_lib.conf
/sbin/ldconfig


使用方法:
主函数:

#include <google/profiler.h>
main
{
ProfilerStart("outfile.prof");
int enable= ProfilingIsEnabledForAllThreads();
WriteLog("[CollectAS] Profiling Enabled: %d", enable);

………………………………


ProfilerStop();

}


每个线程添加注册函数:ProfilerRegisterThread();


此第三方软件在/usr 下,程序的makefile.am文件要包含库: -lprofiler

调用:
pprof --dot collect outfile.prof

利用graphviz将outfile.do生成图纸


=====================================

假设你已经安装好了这个开源工具

1) vim example.cpp
#include<iostream>
#include<stdlib.h>
//#include<google/profiler.h>
#include<stdio.h>
using namespace std;
void consumeSomeCPUTime1(int input){
        int i = 0;
        input++;
        while(i++ < 10000){
                i--;  i++;  i--;  i++;
        }
};

void consumeSomeCPUTime2(int input){
        input++;
        consumeSomeCPUTime1(input);
        int i = 0;
        while(i++ < 10000){
                i--;  i++;  i--;  i++;
        }
};

int stupidComputing(int a, int b){
        int i = 0;
        while( i++ < 10000){ 
                consumeSomeCPUTime1(i);
        }
        int j = 0;
        while(j++ < 5000){
                consumeSomeCPUTime2(j);
        }
        return a+b;
};

int smartComputing(int a, int b){
        return a+b;
};

int main(){
        int i = 0;
        printf("reached the start point of performance bottle neck\n");
        sleep(1);
//      ProfilerStart("CPUProfile.prof");
        while( i++ < 10){
                printf("Stupid computing return : %d\n",stupidComputing(i, i+1));
                printf("Smart computing return %d\n",smartComputing(i+1, i+2));
        }
        printf("should teminate profiling now.\n"); 
        sleep(1);
//      ProfilerStop();
        return 0;
}

2)设置 LD_LIBRARY_PATH就是你的pprof的安装路径下的lib
3)设置CPUPROFILE的值如:CPUPROFILE=cpu;
这里还可以再源文件里面加入被注释掉的语句来设置cpuprofile输出的结果
如果是多线程的话就需要使用ProfilerRegisterThread();这样在每个线程执行的时候就注册了一次
4)编译g++ -g example.cpp -L/usr/local/lib/   -lprofiler -o example
5)执行example就会生成cpu文件
6)查看结果  pprof --text profile cpu>>t1.txt  这里是以text的格式查看函数调用关系 和耗时;也可以用--dot的格式查看;然后再将其转换成gif格式就可以看调用关系图:pprof --dot profile cpu>t1.dot
7)将dot文件下载到本地然后用Graphviz软件转换为gif格式就可以查看函数调用关系了
分享到:
评论

相关推荐

    google-perftools 源码 (一款针对 C/C++ 程序的性能分析工具)

    google-perftools 是一款针对 C/C++ 程序的性能分析工具,它是一个遵守 BSD 协议的开源项目。使用该工具可以对 CPU 时间片、内存等系统资源的分配和使用进行分析,本文将重点介绍如何进行 CPU 时间片的剖析。 google...

    google-perftools下载

    Google Perftools是一套开源的性能分析工具,包含CPU Profiler、Heap Profiler和TCMalloc等多个组件,它们分别针对不同方面提供性能监控和调试功能。对于CPU Profiler,它可以追踪程序中每个函数的执行时间,帮助...

    google-perftools-1.8.2.tar.gz

    `google-perftools`是谷歌公司开源的一款高性能的系统监控和分析工具,主要用于C++应用程序。它提供了丰富的功能,包括内存泄漏检测、CPU性能分析、堆分配跟踪等,帮助开发者优化程序性能,特别是针对内存管理方面的...

    谷歌的google-perftools-1.7.zip

    谷歌的`google-perftools`是一个强大的性能分析和内存管理工具包,主要为C++开发者设计,用于提高程序的性能并有效地管理内存。这个1.7版本的zip文件包含了源码和其他相关文件,使得开发者可以在自己的项目中集成和...

    google-perftools-1.6.tar.gz

    谷歌性能工具(Google Performance Tools,简称gperftools)是一款由Google开发的开源性能分析和内存管理工具集,旨在帮助开发者优化C++程序的性能。在本文中,我们将深入探讨其1.6版本的核心特性、功能以及如何使用...

    google-perftools.rar

    Google Perftools是一款由Google开发的性能分析和内存管理工具包,主要包含tcmalloc(Thread-Caching Malloc)和CPU、内存等性能剖析器。tcmalloc是一种高效的内存分配器,它通过优化内存分配和回收过程来提高系统...

    google-perftools-1.8.3-1.el6.x86_64.rpm

    google-perftools-1.8.3-1.el6.x86_64.rpm

    使用google-perftools优化nginx在高并发时的性能的教程(完整版)

    标题中的“使用google-perftools优化nginx在高并发时的性能的教程(完整版)”指的是一个详细的指南,旨在教导读者如何利用Google的性能分析工具google-perftools来增强Nginx在处理高并发请求时的性能。这个过程涉及到...

    google-perftools-开源

    谷歌Perftools是一款由Google开发并开源的性能分析和内存管理工具套件,它提供了对C++应用程序的深度性能优化支持。标题中的“开源”意味着这个工具是免费且公开源代码的,允许开发者查看、使用、修改以及分发其源码...

    google perftools性能分析工具说明

    Google Perftools 的主要功能是通过采样方式对程序中的 CPU 使用情况进行“画像”,从而对程序中各个函数的调用关系和耗时情况进行分析。这种方式可以帮助开发者快速地找到程序中最耗时的部分,从而对其进行优化,以...

    devtoolset-10-perftools-10.0-0.el7.x86_64.rpm

    离线安装包,亲测可用

    rack-perftools_profiler, 使用 perftools.rb 配置 rack 兼容应用程序的中间件.zip

    rack-perftools_profiler, 使用 perftools.rb 配置 rack 兼容应用程序的中间件 Rack::PerftoolsProfiler使用 perftools.rb 配置机架兼容应用的中间件快速启动假定应用程序使用 Rails 3 ( 你已经在下一节中安装了需求...

    lunch_r58_20160906.7z

    编译R18的时候,看lichee和android选择的是不一样的选项。 初步判断:在android中执行extract-bsp的时候,只是去上一级目录中查找lichee编译生成的内核。 先依葫芦画瓢,依照octopus-perf修改一个octopus-cb5801。...

    rabbitmq-perf-test-2.7.0-bin.tar.gz

    "rabbitmq-perf-test-2.7.0-bin.tar.gz" 是一个针对RabbitMQ性能测试的工具包,版本为2.7.0,用户可以直接下载并解压使用,无需进行复杂的安装过程。 该工具的主要功能是对RabbitMQ服务器进行性能测试,评估其在高...

    perf-tools.zip

    5. **内存分析**:perf还可以分析内存使用情况,如页面缓存、分配和释放的内存块等,帮助我们发现内存泄漏或不合理内存使用的问题。 6. **硬件性能计数器**:perf利用现代处理器内置的硬件性能计数器,可以实时监测...

    bmi160调通bmi160的ACC+GYR_20160907.7z

    使用全志的原生系统,lichee和android的编译选项都是perf3: android使用ENG模式编译,方便调试之用。 wenyuanbo@cm-System-Product-Name:/home/wwt/r58_bma250/lichee$ ./build.sh config Welcome to mkscript ...

    lunch_cb5801_r58_20160907.7z

    编译R18的时候,看lichee和android选择的是不一样的选项。 初步判断:在android中执行extract-bsp的时候,只是去上一级目录中查找lichee编译生成的内核。 先依葫芦画瓢,依照octopus-perf修改一个octopus-cb5801。...

    性能调优工具-perf介绍

    这些机制使perf能够对应用程序和内核的性能进行深入分析。 在硬件层面,了解cache、流水线、超标量、乱序执行和分支预测等概念对于性能优化至关重要。Cache的存在是为了弥补处理器和内存之间速度差异,提高数据访问...

    spark-perf

    1. **资源调优**:合理分配executor的内存和CPU,避免内存溢出或计算资源浪费。 2. **批处理间隔**:调整批处理时间,平衡延迟与吞吐量之间的关系。 3. **DStream操作优化**:减少不必要的transformations,优先使用...

Global site tag (gtag.js) - Google Analytics