标签: google-perftools

如何使用perftools和bundler来分析RSpec?

我需要分析我经常运行的测试套件bundle exec rspec spec/并生成GIF图像.

运行perftools.rb以使其与bundler一起正常工作的命令是什么?

ruby profiling rspec ruby-on-rails google-perftools

16
推荐指数
1
解决办法
1891
查看次数

MacOSX上的Google Perftools CPU Profiler中的行号

我试图在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)

c++ macos gcc google-perftools

13
推荐指数
2
解决办法
2642
查看次数

gperftools CPU Profiler到底是怎么开始的?

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"的所有情况都不会引用启动分析器的任何位置.

我没有想法,在哪里看下一个?

linker gcc dynamic-linking google-perftools gperftools

9
推荐指数
1
解决办法
4852
查看次数

Google Performance Tools(探查器)教程

我刚下载并构建了Google Performance Tools的库/可执行文件.在我想要调查的应用程序上运行CPU分析器之前,我想学习如何在示例应用程序上正确使用这些工具.运行Google CPU Profiler的好例子是什么?提前致谢.

c++ profiler sample google-perftools

7
推荐指数
1
解决办法
3926
查看次数

如何解释Google perf工具CPU探查器中的地址

我的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)

此外,我通过代码检查找到了根本原因.但让探查器精确定位罪魁祸首而不是地址仍然是件好事.

c++ profiling google-perftools

7
推荐指数
1
解决办法
1448
查看次数

如何在Go程序中使用pprof

如何在Go程序中使用pprof?

有一个名为net/http/pprof的Go包,但我无法使用它.

该文件说go tool pprof http://localhost:6060/debug/pprof/heap,这是行不通的.

而且,以下_是什么意思?

import _ "net/http/pprof"

go google-perftools pprof

7
推荐指数
1
解决办法
1万
查看次数

gperftools cpu profiler不支持多进程?

根据文档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)

linux profiling google-perftools gperftools

7
推荐指数
1
解决办法
1768
查看次数

gperftools如何在引擎盖下工作?

我正在寻找一个关于gperftools如何工作的简单解释.到目前为止,这是我所学到的:

  • 它运行一个世界各地的采样器.换句话说,它会定期停止正在分析的程序以收集信息.
  • Golang的pprof库使用下面的gperftools.

除了一般概述,以下是我想回答的一些具体问题:

  • gperftools是" 基于事件的分析器 "还是" 仪器分析器 ".据我所知,这些分析器修改程序运行的方式并通过这些修改收集样本
  • 在操作系统的"级别"中,gperftools的配置文件是什么?它是否像SystemTapperf一样描述核心?
  • gperftools可以安全地在高流量的生产服务器上运行吗?

我问这个问题来推断在Go服务器上使用pprof引入的开销.

google-perftools gperftools pprof

7
推荐指数
1
解决办法
773
查看次数

Google perftool无法读取文件"libprofiler.so.0"

我正在尝试使用谷歌性能工具进行CPU时间分析.但是,我遇到了一些问题,我无法读取共享库文件"libprofiler.so.0"

我已经阅读了google性能工具的自述文件,手册中有3个步骤:

  1. 编译我的程序-lprofiler.我没有遇到任何问题.

  2. 运行我的程序的二进制文件以生成配置文件结果文件.
    我在这一步失败了.当我尝试运行我的二进制文件时,会出现一条错误消息:
    "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大约一年,请原谅我,如果我的问题非常愚蠢.并且,提前谢谢你.

我的机器信息:

  • 操作系统:Ubuntu 8.10
  • 编译器:gcc 4.3.2
  • shell:bash
  • 谷歌性能工具版本:1.4(我今天刚下载)

linux shared-libraries dynamic-linking google-perftools

6
推荐指数
1
解决办法
4400
查看次数

使用谷歌perftools时,SIGPROF会杀死我的服务器

我有一个用C/C++编写的多线程服务器进程,我试图用Google perftools进行分析.但是,当我使用perftools运行该进程时,很快我的服务器因"syscall interrupt"错误而停止,我认为这是由传入的SIGPROF引起的.(正在被中断的实际系统调用深入到我对zmq_recv的调用中,但我认为它不是真正重要的.)

这是预期的行为吗?我应该以某种方式明确处理这个案子吗?或者这里出了什么问题?

c c++ linux signals google-perftools

6
推荐指数
1
解决办法
852
查看次数


4
推荐指数
1
解决办法
5763
查看次数

如何在Google Profiler中查找CPU使用情况

我正在使用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使用?

google-perftools

4
推荐指数
1
解决办法
3560
查看次数