问题标签 [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.
hex - gproftools 分析中的十六进制函数名称
在使用 gproftools(谷歌分析器)进行 CPU 分析后,它会将一些函数名称显示为十六进制值。
根据https://groups.google.com/forum/#!topic/google-perftools/7sdO7wrPUpE的最后评论,问题看起来像是由ASLR引起的 但我不明白为什么很少有函数名称是十六进制值而其他都是正常的。
分析的样本输出。
16 0.40% 86.80% 16 0.40% 00007f05e018bc5d
16 0.40% 87.20% 36 0.90% _IO_file_xsgetn
16 0.40% 87.60% 16 0.40% __memcpy_sse2
16 0.40% 88.00% 16 0.40% __tls_get_addr
15 0.40% 88.40% 15 0.40% __GI___libc_free
15 0.40% 88.70% 15 0.40% __GI_strlen
gperftools - 如何获得正确的 gperf 样本报告
我有一些gperf tool
文件:
第一个运行了大约 2 分钟,文件为18M;
其他运行约2小时,文件约800M
当我尝试使用 :pprof --text
获取报告时,发现第一个有1300个样本,但是这 2 个小时只运行了5500个样本。
我排除了较大的文件2*3600*100 samples
(因为“默认情况下,gperf 工具每秒采集 100 个样本”)。
同样的程序,同样的运行环境,为什么样本太少?对不起我糟糕的英语。
c++ - 将 gperftools 与 Jetson TX1 开发套件一起使用
我被推荐使用 gperftools 来简单快速地分析我的代码。此外,-lprofiler 的集成已经在我得到的代码的 CMAKE 中完成。现在我将源代码迁移到 Jetson TX1 并且运行良好,我尝试使用 gperftools。
不幸的是,当我使用 perftools 启动程序时,分段错误开始出现
我已经阅读了文档,他们谈到了在 64 位 Linux 上使用正确的 libunwind。不幸的是,给定的库(0.99 libunwind,http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-beta.tar.gz)似乎不喜欢 Tegra 平台。
首先,config.guess 有一个问题,我必须用位于 /usr/share/automake*/ 中的那个进行更改。
然后它会像这样出错:
我尝试使用主树,因为他们添加了 AARCH64(出现在错误消息中),但随后我收到其他消息:
- 任何人都能够在 Tegra Dev Kit 或类似平台上使用 gperftools 吗?
- libunwind 是段错误问题的一部分吗?代码再次在没有 -lprofiler 和 CPUPROFILER 的情况下工作。
profiler - 使用 GPerf 工具:不工作,重定向问题?
我正在尝试分析我的软件以优化它。
我使用gprof
了编译标志-g -pg -O3
,但结果没有给我足够的精度。
这是我的编译堆栈跟踪:
这就是我如何称呼我的程序:
所以执行后,一切都很好,我得到了一个gmon.out
文件。我正在执行命令gprof ./bin/mdk-verifier | more
,我得到以下结果:
很明显, ModalOperation::checkBranch 的调用次数溢出了......并且通过每次我进入这个函数时进行显示,我确实做了超过 18 个调用......
所以我考虑使用另一个更精确的分析器,我找到了 Google 的GPerfTools。
我想使用它,我安装在我的 Ubuntu 上:
- libgoogle-perftools-dev
- 谷歌性能工具
并按照教程,他们要求我设置环境变量CPUPROFILE
我做到了,我得到:
我还在-lprofiler
我的可执行文件的链接过程中放了,所以我认为一切都很好,我可以开始分析文件中的数据./prof.out
但不幸的是,这个文件没有出现......没有创建任何东西,所以我无法分析任何东西......
有谁知道为什么./prof.out
没有创建文件以及为什么分析没有收集数据?
在此先感谢您的帮助 !
此致;
c++ - 如何使用 gperftools 有条件地分析 C++ 代码?
我正在尝试对回调驱动的系统进行 CPU 分析,并且我只对在回调导致我以某种方式做出反应时进行分析感兴趣?我可以使用 gperftools 来完成这项工作吗?
ProfilerEnable()
/ProfilerDisable()
似乎很有希望,但标题说这些已被弃用。我什至不确定这些是否可行。
c++ - 在 Mac OS X 上使用 gperftools 的问题
关于这个话题,我发现了几个相互矛盾的答案。这篇博文需要 libuwind,但这在 Mac OS X 上不起作用。我包含#include <google/profiler.h>
在我的代码中,但是我的编译器 (g++) 找不到该库。我gperftools
通过自制软件安装。此外,我发现这个stackoverflow 问题显示了这一点:
然后我运行 pprof 来生成输出:
运行该命令(没有任何先前的步骤)让我得到这个:
为什么它试图访问我机器上的互联网站点和他/她的本地文件?
尝试使用 g++ 将 lib profiler 链接为空运行让我:
我查看了手册页、帮助选项文本、官方在线指南、博客文章和许多其他来源。
我现在很困惑。有人可以帮我使用 gperftools 吗?
我与@osgx 对话的结果就是这个脚本。我试着把它清理一下。它也可能包含很多不必要的选项。
profiling - gperftools 不显示调用图结果
我已经安装了 gperftools 并收集了数据,到目前为止这看起来很合理。我看到一个节点(?)被大量采样 - 但我对该节点的调用者感兴趣 - 我没有看到它们?我也试过 callgrind/kcachegrind,我觉得我错过了什么?这是使用 --text 时的输出片段
所以我有兴趣看到 US_strcpy 的调用者,但我似乎没有?我确实从 kcachegrind 获得了 0x40472984 的漂亮调用图(仍在尝试将其与符号匹配)
c++ - 在不安装的情况下使用 gperftools/Heaptrack
我正在尝试在 unix 平台上对 C++ 应用程序进行堆分析。我已经尝试过 valgrind 的地块,但它使应用程序非常缓慢并影响应用程序的行为。
我正在寻找其他选项并遇到gperftools和heaptrack。尽管这些对于我的问题来说是可行的解决方案。但是我在这里有限制,我没有足够的权限来安装这些工具。
有什么方法可以设置 gperftools 或 heaptrack 而无需在 unix 中安装它们?
提前致谢
c++ - 让 gperftools 与 Rcpp 一起工作
我在这里和这里阅读了相关的帖子,并在此处查看了 Dirk Eddelbuettel 的演讲,但我什至无法从 .log 文件中获取 .log 文件gperftools
。这是我的R
文件,名为Rcpp_practice.R
:
以下是 的内容eigen.cpp
:
然后,在终端上(我使用的是 OSX):
我希望看到eigenprof.log
坐在我的工作目录中,但我没有。另外,我没有收到我在表单的其他帖子中看到的消息PROFILE: interrupts/evictions/bytes = 012/34/567891
我确认我安装了最新版本gperftools
。($ brew upgrade google-perftools
给出Error: gperftools 2.5 already installed
)。
我错过了什么?
更新
在我修改我的代码以匹配@nrussell's 后,我收到以下错误消息:
sourceCpp
如果我以交互方式运行脚本,这将出现在行上。
c++ - 我在探查器输出中看到的 __nss_passwd_lookup() 调用是什么?
我正在使用gperftools来分析使用 GCC 5.4.0(使用 -O3)编译的 C++ 应用程序。
代码经过高度优化,所以我在输出中看不到很多分支,但是有一个名为__nss_passwd_lookup()的分支,它需要大量时间:
我唯一的猜测是它以某种方式与内存分配有关。
操作系统:Ubuntu 16.04 x86_64,内核:4.8。