我需要分析我经常运行的测试套件bundle exec rspec spec/并生成GIF图像.
运行perftools.rb以使其与bundler一起正常工作的命令是什么?
我试图在MacOSX上分析一些C++程序.所以我构建google-perftools了一个程序,使用MacPorts g ++ 4.7 -g编译,带有编译器标志,并链接到libprofiler.然后我跑了:
CPUPROFILE=cpu.profile ./a.out
Run Code Online (Sandbox Code Playgroud)
然后我运行pprof来生成输出:
[hidden ~]$ pprof --text ./a.out cpu.profile
Using local file ./a.out.
Using local file cpu.profile.
Removing __sigtramp from all stack traces.
Total: 282 samples
107 37.9% 37.9% 107 37.9% 0x000000010d72229e
16 5.7% 43.6% 16 5.7% 0x000000010d721a5f
12 4.3% 47.9% 12 4.3% 0x000000010d721de8
11 3.9% 51.8% 11 3.9% 0x000000010d721a4e
9 3.2% 55.0% 9 3.2% 0x000000010d721e13
8 2.8% 57.8% 8 2.8% 0x000000010d721a64
7 2.5% 60.3% 7 2.5% 0x000000010d7222f0
6 2.1% …Run Code Online (Sandbox Code Playgroud) gperftools文档说libprofiler应该链接到目标程序:
$ gcc myprogram.c -lprofiler
Run Code Online (Sandbox Code Playgroud)
(不改变程序代码).
然后程序应该使用特定的环境变量运行:
CPUPROFILE=/tmp/profiler_output ./a.out
Run Code Online (Sandbox Code Playgroud)
问题是:libprofile当仅仅加载探测器时,如何有机会启动和完成探查器,但是它的功能没有被调用?
该库中没有构造函数(证明). 库代码中"CPUPROFILE"的所有情况都不会引用启动分析器的任何位置.
我没有想法,在哪里看下一个?
我刚下载并构建了Google Performance Tools的库/可执行文件.在我想要调查的应用程序上运行CPU分析器之前,我想学习如何在示例应用程序上正确使用这些工具.运行Google CPU Profiler的好例子是什么?提前致谢.
我的C++程序消耗了大量的CPU,并且运行时更多.我使用Google Performance Tools来分析CPU使用情况,这就是我得到的:
(pprof) top
Total: 1343 samples
1330 99.0% 99.0% 1330 99.0% 0x0000000801dcb11c
7 0.5% 99.6% 7 0.5% 0x0000000801dcb11e
4 0.3% 99.9% 4 0.3% program::threadWorker
1 0.1% 99.9% 1 0.1% 0x0000000801dcb110
1 0.1% 100.0% 1 0.1% 0x00007fffffffffc0
Run Code Online (Sandbox Code Playgroud)
但是,此处显示的5个进程中只有1个是实际的函数名称; 其余的都是地址.我怎样才能知道这些地址的含义?(当然,我最感兴趣的是上面显示的第一个地址)
编辑:这是我运行探查器的方式:
env CPUPROFILE=prof.out ./a.out
[kill program]
pprof ./a.out prof.out
Run Code Online (Sandbox Code Playgroud)
此外,我通过代码检查找到了根本原因.但让探查器精确定位罪魁祸首而不是地址仍然是件好事.
如何在Go程序中使用pprof?
有一个名为net/http/pprof的Go包,但我无法使用它.
该文件说go tool pprof http://localhost:6060/debug/pprof/heap,这是行不通的.
而且,以下_是什么意思?
import _ "net/http/pprof"
根据文档http://gperftools.googlecode.com/svn/trunk/doc/cpuprofile.html,cpu配置文件支持多进程并将生成独立的输出文件:
如果您的程序分叉,子项也将被分析(因为它们继承了相同的CPUPROFILE设置).每个过程都是单独分析的; 为了区分子配置文件与父配置文件以及彼此之间的所有子配置,所有子节点都将其process-id附加到CPUPROFILE名称.
但是当我尝试如下:
// main_cmd_argv.cpp
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <gperftools/profiler.h>
int loop(int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
sum = i + j;
if (sum %3 == 0) {
sum /= 3;
}
}
}
return 0;
}
int main(int argc, char* argv[]) {
printf("%s\n%s\n", getenv("CPUPROFILE"), getenv("CPUPROFILESIGNAL"));
if …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个关于gperftools如何工作的简单解释.到目前为止,这是我所学到的:
除了一般概述,以下是我想回答的一些具体问题:
我问这个问题来推断在Go服务器上使用pprof引入的开销.
我正在尝试使用谷歌性能工具进行CPU时间分析.但是,我遇到了一些问题,我无法读取共享库文件"libprofiler.so.0"
我已经阅读了google性能工具的自述文件,手册中有3个步骤:
编译我的程序-lprofiler.我没有遇到任何问题.
运行我的程序的二进制文件以生成配置文件结果文件.
我在这一步失败了.当我尝试运行我的二进制文件时,会出现一条错误消息:"error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory.".
我用谷歌搜索,在这个页面中,有人说它"libprofiler.so.0"在"/usr/local/lib",所以我将共享库文件复制到我的二进制文件目录,并尝试运行我的二进制文件.它仍然报告相同的错误消息.
我刚刚使用Linux大约一年,请原谅我,如果我的问题非常愚蠢.并且,提前谢谢你.
我的机器信息:
我有一个用C/C++编写的多线程服务器进程,我试图用Google perftools进行分析.但是,当我使用perftools运行该进程时,很快我的服务器因"syscall interrupt"错误而停止,我认为这是由传入的SIGPROF引起的.(正在被中断的实际系统调用深入到我对zmq_recv的调用中,但我认为它不是真正重要的.)
这是预期的行为吗?我应该以某种方式明确处理这个案子吗?或者这里出了什么问题?
我正在使用Google CPU Profiling工具.
http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html
在文档上给出
分析文本输出
文本模式的输出行如下所示:
14 2.1% 17.2% 58 8.7% std::_Rb_tree::find
Run Code Online (Sandbox Code Playgroud)
以下是如何解释列:
但我无法理解哪些列告诉我CPU功能的确切或百分比?
如何获得一个功能起诉谷歌个人资料的CPU使用?