问题标签 [gperftools]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
240 浏览

c++ - 在 Boost.Python 中使用 gperftools

我正在尝试追踪我使用 Boost.Python 在 C++ 中编写的 Python 扩展中的内存泄漏。我试图使用gperftools。但是,它似乎根本不能很好地与 Python 配合使用。

这是一个简单的例子,我要公开std::vector<int>

如果我按照建议编译该模块-ltcmalloc,那么即使是简单的迭代也会崩溃:

调用堆栈点在这里:

我怀疑这是因为 gperftools 没有处理在 python 中一直抛出异常的事实,这是意料之中的。有没有人有使用 gperftools 来追踪这样的泄漏的经验?

这甚至可能吗,还是我基本上只是卡住了?

0 投票
1 回答
1209 浏览

google-perftools - gperftools 如何在后台工作?

我正在寻找gperftools如何工作的简单解释。到目前为止,这是我学到的:

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

除了一般概述之外,还有一些我想回答的具体问题:

  • gperftools 是“基于事件的分析器”还是“检测分析器”。据我了解,这些分析器通过这些修改修改程序运行和收集样本的方式
  • gperftools 配置文件在操作系统的哪个“级别”?它是否像SystemTapperf那样分析内核?
  • gperftools 在高流量生产服务器上运行是否安全?

我问这个问题是为了解释在 Go 服务器上使用 pprof 引入的开销。

0 投票
2 回答
465 浏览

cpython - gperftools 无法识别文件

有没有办法避免 Google 性能工具将文件列为“??:?”,即无法找到包含它报告的功能的文件?如何确定哪个库包含被调用的函数?

我的目标是能够在具有许多已编译 C 扩展模块的 python 包中分析 C 代码。在上面的玩具示例中,我将如何追踪“dtrsm_”的定义位置?如果有多个加载的库包含具有相同名称的函数,有没有办法判断正在调用哪个版本?

0 投票
1 回答
572 浏览

c++ - tcmalloc 巨大的性能差异

我们的多线程服务器有数百个连接线程,负责处理 IO 并回复传入的请求。

还有另一个异步线程运行相对繁重的任务,不时分配很多(比如每隔几秒)。

一旦我将该线程转换为一个小线程池(即,这些任务现在每次都从不同的线程运行),我们的服务器通常具有相同的 CPU 使用率,但它可能会突然达到这样的状态,即所有操作的分配需要更多时间并且整体 CPU服务器的使用率几乎翻了一番,从 2 核增加到 3.7 核。

到目前为止,我的主要理论是我以某种方式更改了 tcmalloc 库的访问模式,这会导致随机 CPU 提升。为了证实这个理论,我应该在 tcmalloc stats 中查看什么?现在从不同线程(但不是同时)运行的相同代码是否会导致 tcmalloc 从中央缓存中分配比从线程缓存中分配更多?

0 投票
0 回答
221 浏览

r - 在 gperftools 中获取 R 包的调用层次结构

我可以使用 gperftools 来生成调用图,例如这个问题

现在我想bind_rows()dplyrR 包中获取一个调用图,以便追踪这个错误

我编译了两者Rdplyr使用CPP/CXXFLAGS=-g -fvar-tracking-assignmentsand LDFLAGS=-lprofiler -lunwind

当我运行以下命令时:

我得到的是:

在此处输入图像描述

如何获取调用层次结构,以便知道dplyr绑定行文件中的哪个调用是瓶颈?

编辑:似乎该--focus选项是我在这里需要的。但是如何将它连接到RecursiveRelease

在此处输入图像描述

编辑:用 重新编译 Rcpp 并-g与 链接后-lprofiler,我可以得到以下信息: flame.svg,其中 8% 获得了良好的堆栈跟踪,但大部分仍然没有。-lprofiler这可能是因为某些库是在没有支持加载的

0 投票
3 回答
2731 浏览

ubuntu - tcmalloc 不能在 ubuntu 上使用 -ltcmalloc_minimal

我使用 apt-get install libtcmalloc-minimal4 在 Ubuntu 14.0 上安装了 tcmalloc

我做了以下步骤:

ln -s libtcmalloc_minimal.so.4.1.2 libtcmalloc_minimal.so
将我的可执行文件与 -ltcmalloc_minimal 链接

运行代码后,我看不到任何性能差异。

我尝试使用 HEAPCHECK 运行以检查是否正在使用 tcmalloc,但没有发现任何与 HEAPCHECK 相关的警告。

我的程序包含 malloc 调用和 openMP。还有什么我需要做的吗?如何检查以确保我的程序正在使用 tcmalloc?

0 投票
1 回答
2686 浏览

c++ - 我已经设置了 CPUPROFILE 环境变量并链接了 -lprofiler。为什么 gperftools 没有启动分析器?

根据gperftools 文档,可以使用以下任何方法启动分析器:

  1. CPUPROFILE环境变量设置为配置文件信息将保存到的文件名
  2. 执行上述操作,并设置CPUPROFILESIGNAL和发送适当的信号以启动或停止采样。
  3. 直接从您的ProfilerStart(filename)代码调用ProfileStop()

这三种方法也需要libprofiler.so链接。

当我尝试这个时,第三种方法有效,但是当我只是 set 时CPUPROFILE,没有生成分析信息。

不工作:

是否有效:

请注意,CPUPROFILE正在读取它,因为它的值会覆盖传递给ProfileStart()if 设置的文件名。

0 投票
1 回答
546 浏览

c++ - 取消定义对 tcmalloc 公共 API 的引用

我已经克隆了 google-perf git 树。

上述所有步骤均成功。我可以在 /usr/include/gperftools/tcmalloc.h 等中看到头文件

我的程序

汇编

如果我注释掉 GetStats 行,那么编译工作正常。所以我假设它与 tcmalloc 链接。但是,当我尝试访问 API 时,它给了我一个错误。

可能是什么问题呢?也许有什么想法?

0 投票
1 回答
111 浏览

c++ - 无法分析库中的线程

我正在尝试使用Google Performance Tools,特别是 64 位 Ubuntu 14.04 存储库中的官方版本,来调试应用程序及其相关.so库。

以最小的更改运行,只需确保-g已设置,即可获得跟踪信息,但主可执行文件中只有几个符号。按照相当少的文档中的建议添加ProfilerRegisterThread()到库中的线程实际上会使事情变得更糟,输出的符号更少,只有十六进制地址。

如何正确地分析库中的线程?

0 投票
0 回答
319 浏览

c++ - 尝试与 tcmalloc 链接时出现 LNK2005 错误

我试图在 Visual Studio 2013 中使用 tcmalloc 编译一个项目。我已经从gperftools包中编译了 libtcmalloc 的 .lib 文件,并将 libtcmalloc.lib 添加到链接器输入选项中。

当我尝试构建我的项目时,我收到以下错误:

如果我从链接器选​​项中删除 libtcmalloc.lib,项目编译得很好..