Ubuntu Box上的应用程序分析[关闭]

Posted

技术标签:

【中文标题】Ubuntu Box上的应用程序分析[关闭]【英文标题】:Application profiling on Ubuntu Box [closed] 【发布时间】:2014-05-08 06:07:16 【问题描述】:

我有这个用 C 编写的应用程序,应该对其进行调整以提高性能。我查看了一些 Linux 中可用的性能分析器,发现 GNU 分析器,valgrind 就是其中的一部分。问题是它们都只提供功能级别的分析信息,而不是我需要的语句级别的分析。有什么工具可以提供这些信息。

【问题讨论】:

【参考方案1】:

使用-g 编译代码以获取调试符号,并使用-O0 编译代码,这样优化器就不会打乱代码。

然后在 GDB 调试器下运行它,当它运行缓慢时,通过键入 Ctrl-C 来中断它。 它将在另一个线程上停止,因此键入thread 1 以进入活动线程。 然后键入bt 以显示调用堆栈。 仔细查看它,了解它在做什么,为什么它在做,什么时候停止。

这样做几次,您就会非常准确地了解它是如何花费时间的。 这就是random pausing 技术,如果你通过那里的cmets,你会看到它的效果如何。 另外,FWIW,我发了一个short video of it

正如您所指出的,大多数分析器不会为您提供行级信息。我知道一个给你a)行级信息,b)包含时间(“自我时间”几乎没用),c)挂钟时间(所以你不是对 I/O 视而不见)是Zoom。 也许其他人可以做到,我不确定。

即使分析器为您提供了所有这些,它也为您提供了宝贵的少量上下文,而上下文是您需要能够识别何时所花费的时间实际上是您可以摆脱的东西。 随机暂停为您提供完整的上下文。 它让您的大脑识别正在发生的事情,最重要的是为什么,而不是仅仅为您提供数字或图形摘要,并希望这足以找到加速。

当您尽可能挤出每个循环后,您仍然会看到很大一部分样本在编译器编译的代码中终止,然后打开 -O3 并让优化器完成它的工作。

【讨论】:

【参考方案2】:

perf 工具是开始分析的好方法,这是link

oprofile 也不错,但您需要 root 访问权限,因为这是 link

如果您想查看 每行分析,最好使用 annotate 选项。尝试使用非条带二进制文件并使用 -g -static 标志编译。是这样吗你想要什么或不同的答案。

【讨论】:

由于某些原因,它不适用于我的 ubuntu 内核 3.13.0-24-generic。它失败并出现大量警告“内核不支持停滞周期前端事件” @dreamer 是两个分析工具都有问题,还是您说的是特定的分析工具?? 我认为分析器已经完成了任务,如果你知道哪个函数是性能密集型的,那么如果函数定义很简单,你应该能够找出哪个语句需要时间,如果不是,那么你可以使用记录器找出所需的语句。

以上是关于Ubuntu Box上的应用程序分析[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Electron dialog.showOpenDialog() 关闭 Ubuntu 18.10 上的应用程序

Windows10 + Ubuntu 20.04 上的 CUDA 问题 [关闭]

控制和分析内存和时间消耗 C++ Windows 应用程序? [关闭]

如何分析 Windows 和 Linux 上的应用程序以获取 CPU 和 RAM 使用值? [关闭]

是否可以分析 Android 或 iOS 上的 PhoneGap 应用缓存?

如何使用流星[关闭]