pprof是分析google cpu profiler输出文件的工具,
但在使用之前需要做些准备工作
1、安装graphviz(提供dot工具)
2、安装gv(http://www.gnu.org/software/gv/)
下载gv源码后,需要做一下准备
安装Xaw3d库
yum install Xaw3d
libXaw3d*放在:/usr/X11R6/lib
安装头文件
yum install Xaw3d-devel.x86_64
然后就可以./configure然后安装了。
google cpu profiler只有gproftools中的一个工具
可以在这里下载源码安装(注意事项见INSTALL)
http://code.google.com/p/gperftools/
下来介绍下怎么使用它。
首先设置环境变量CPUPROFILE,指定输出文件
$ CPUPROFILE=/tmp/profile $ env | grep CPUPROFILE $ export CPUPROFILE $ env | grep CPUPROFILE CPUPROFILE=/tmp/profile
随便写个程序
double bfunc() { double sum = 0; for (int i = 0; i < 100; ++i) { sum = sum * i; } return sum; } int afunc() { int sum = 0; for (int i = 0; i < 100; ++i) { sum += i; } return sum; } int main() { for (int i = 0; i < 1000000; ++i) afunc(); for (int i = 0; i < 1000000; ++i) bfunc(); return 0; }
编译
gcc -lstdc++ -g -finstrument-functions test.cpp -lprofiler
运行./a.out看到
$ ./a.out PROFILE: interrupts/evictions/bytes = 25/0/192
ll /tmp/profile 可以看到产生的输出文件
生成dot文件
$ pprof --dot a.out /tmp/profile Using local file a.out. Using local file /tmp/profile. Removing killpg from all stack traces. digraph "a.out; 2 samples" { node [width=0.375,height=0.25]; Legend [shape=box,fontsize=24,shape=plaintext,label="a.out\lTotal samples: 2\lFocusing on: 2\lDropped nodes with <= 0 abs(samples)\lDropped edges with <= 0 samples\l"]; N1 [label="__libc_start_main\n0 (0.0%)\rof 2 (100.0%)\r",shape=box,fontsize=8.0]; N2 [label="bfunc\n2 (100.0%)\r",shape=box,fontsize=58.0]; N3 [label="main\n0 (0.0%)\rof 2 (100.0%)\r",shape=box,fontsize=8.0]; N3 -> N2 [label=2, weight=1, style="setlinewidth(2.000000)"]; N1 -> N3 [label=2, weight=1, style="setlinewidth(2.000000)"]; N2 -> N2 [label=1, weight=1, style="setlinewidth(2.000000)"]; }
把它重定向到b.dot,生成gif,可能会遇到
$ dot -Tgif b -o outfile.gif Renderer type: "gif" not recognized. Use one of: canon cmap cmapx dia dot fig hpgl imap ismap mif mp pcl pic plain plain-ext ps ps2 svg svgz vtx xdot
据说是一个Bug,yum install graph-gd之后就可以了。
也可以在下载源码安装,但是安装的时候提示graphviz的版本也要一致。
没办法重新下个一致的graphviz编译。
需要安装ann-libs等依赖见
http://rpm.pbone.net/index.php3/stat/3/srodzaj/1/search/libANN.so.1
http://www.graphviz.org/Download_linux_rhel.php
需要啥依赖都在rpm search那里搞吧。用个东西真不容易。。
最后终于大功告成
dot -Tgif b.dot -o outfile.gif
可以生成gif图片了。
这说明整数的加法相对于浮点数的乘法就是毛毛雨。
调整一下代码
double bfunc() { double sum = 0; for (int i = 0; i < 100; ++i) { sum = sum * i; } return sum; } int afunc() { double sum = 0; for (int i = 0; i < 100; ++i) { sum = sum * i; } return sum; } int main() { for (int i = 0; i < 1000000; ++i) afunc(); for (int i = 0; i < 1000000; ++i) bfunc(); return 0; }
这是符合期望的,但是main函数呢?可见main函数体的cpu运行时间太少了。再调整一下
double bfunc() { double sum = 0; for (int i = 0; i < 2; ++i) { sum = sum * i; } return sum; } int afunc() { double sum = 0; for (int i = 0; i < 2; ++i) { sum = sum * i; } return sum; } int main() { for (int i = 0; i < 50000000; ++i) afunc(); for (int i = 0; i < 50000000; ++i) bfunc(); return 0; }
看到main函数了,为啥没有边(edges)?发现把之前的-g改成-O2了。。
g++ -g -lstdc++ test.cpp -lprofiler
sh make.sh ./a.out pprof --dot --edgefraction=0.0 a.out /tmp/profile > b.dot dot -Tgif b.dot -o outfile.gif最后的结果,如果不关心调用关系,只关心每个函数的CPU占用,还是可以把-g换成-O2的。
(如果编译加上-finstrument-functions,可以看到内核调用了__cyg_profile_func_exit)
最后为了用浏览器看到结果,
用tornado(http://www.tornadoweb.org/en/stable/)搭个web服务。
这个还是很使用的,因为很多时候我们在上面的分析可能在远程linux服务器下。
相关推荐
yet-another-django-profiler, Django 性能分析中间件和管理命令 yet-another-django-profiler自述文件 然而,另一个 Django 探查器尝试合并多年来创建的它的他 Django 分析实用程序的最佳特性。 ( 有关更多背景信息...
提供文本方式的输出便于使用工具软件或者脚本进行日志分析。不同于大多数厂家的定制工具,XCLProfiler支持所有标准的OpenCL厂家的产品。支持Windows/Linux 32位以及64位操作系统。XCLProfier不包括核心部分的源代码...
还有其他用于Rust的性能分析工具,cargo-profiler是CPU Profiler的一部分。该库提供与Google的cpuprofiler的绑定。 为什么要使用这个? 还有其他用于Rust的分析工具,cargo-profiler尤其好! 该库肯定不会替代那些库...
轻量级jvm性能分析工具,相比jvisualvm的profile,对jvm进程的性能影响低于10%,可作为线上监控使用
.Net Memory Profiler(以下简称Profiler):专门针对于.NET程序,功能最全的内存分析工具,最大的特点是具有内存动态分析(Automatic Memory Analysis)功能。
Android Profiler分为三大模块:...本文给大家介绍AndroidStudio3.0最新 Android Profiler分析器(cpu memory network 分析器)的相关知识,他们的基本使用方法,在文中都给大家提到,具体内容详情大家通过本文一起学习吧
该工具旨在使用Gecko Profiler中的性能配置文件,但可以可视化任何能够以JSON输出的配置文件中的数据。 该接口是使用和构建的Web应用程序,并且完全在客户端运行。 开发了此工具,以帮助使其数百万用户流畅流畅地...
使用方法在我的博客中 java 性能调优,使用 async-profiler + FlameGraph火焰图 分析cup消耗热点代码
Oracle存储过程和PL/SQL代码常常包含了多个子过程和SQL,对于单个的SQL,我们很容易分析他的执行效率,但是对于PL/SQL存储过程,我们如何分析它的执行效率、具体每一步的耗时情况呢?文档和脚本提供了profiler工具...
用 .NET Memory Profiler 跟踪.net 应用内存使用情况--基本应用篇 .NET Memory Profiler 跟踪.net 应用内存使用情况--基本应用篇
NLP探查器||| ||| 一个简单的NLP库,允许使用一个或多个文本列来分析数据集。 给定数据集和该列中包含文本数据的列名称时,NLP Profiler会返回有关文本的高级洞察或低级/粒度统计信息。 简而言之:可以将其视为使用...
Intel vtune profiler 使用指导
完全版 使用手册Optimizeit Profiler6
一种用于自动收集Gradle构建的性能分析和基准测试信息的工具。 可以使用几种不同的工具来捕获分析信息: 使用 使用 使用 使用分析器 使用 产生HPROF格式的堆转储 产生输出 正在安装 SDKMAN! 是用于在大多数...
NET-Memory-Profiler 4-使用手册,检查内存,是否溢出等,记录,图片查看
性能分析工具、内存分析、cpu占用分析、亲自测试、感觉比vs自带的性能分析好用。
监控CLR的分析工具,
TensorFlow分析器 探查器包括一套工具。 这些工具可帮助您了解,调试和优化可在CPU,GPU和TPU上运行的TensorFlow程序。 演示版 初次使用者? 快来看看这个。 先决条件 TensorFlow> = 2.2.0 TensorBoard> = 2.2.0 ...
Microsoft SQL.Server性能优化工具Profiler
在企业管理器界面(已连接到相关数据库)依次打开:tool —> SQLServer Profiler —> New Trace(新建跟踪器)—> 链接到相应数据库服务器(connect)—> 运行跟踪(run)—> Clear Trace Window()清除跟踪窗口—>。...