开源性能分析框架?

7 投票
3 回答
1225 浏览
提问于 2025-04-11 17:37

你有没有想过要测试一下你的应用程序在不同情况下表现得怎么样,比如静态构建和共享构建、去掉调试信息和保留调试信息、使用UPX压缩和不使用UPX、用gcc -O2还是gcc -O3、使用哈希表还是B树等等。如果有的话,这个讨论串就是为你准备的。调优应用程序的方法有很多,但我们该如何收集、整理、处理和可视化每次实验的结果呢?

我已经找了好几个月,想要一个开源的应用性能工程/分析框架,类似于Mozilla的Perftastic,这样我就可以开发、构建、测试和分析成百上千种不同的调优实验。

一些需求:

平台

SUSE32和SUSE64

数据格式

需要非常灵活、紧凑、简单、分层的格式。可以有几种选择,包括:

数据采集

需要灵活和可定制的插件。我们需要从应用程序中收集很多数据,包括来自/proc的性能数据、系统时间、实际时间、CPU使用率、内存情况、内存泄漏、valgrind日志、内存碎片、I/O、localhost套接字、二进制文件大小、打开的文件描述符等等,还有一些来自主机系统的数据。我打算用Python来开发这些插件,监控和解析各种格式的数据,并将它们存储在框架要求的数据格式中。

标记

所有实验都会被标记,包括GCC版本、编译选项、平台、主机、应用选项、实验、构建标签等数据。

图表

需要历史、比较、层次、动态和静态的图表。

  • 应用程序的构建是由一个自定义的CI服务器完成的,这个服务器在过去三年里每天发布多个新版本。这就是我们需要持续趋势分析的原因。当我们添加新功能、修复bug或更改构建选项时,我们希望自动收集性能数据并查看趋势。这就是需要生成各种静态构建的地方。
  • 在分析方面,Mozilla动态图表非常适合进行比较图表。能够在不同标签之间进行比较图表会很好。例如,比较N个构建版本、比较平台、比较构建选项等等。
  • 我们有一个包含3000个测试的测试套件,数据会根据每个测试收集,并从测试间数据、每个测试、每个标记组到完整的回归测试套件进行分组。
  • 可能的工具包括RRDToolOrcaGraphite

基于分组的分析

  • 最小值
  • 最大值
  • 中位数
  • 平均值
  • 标准差
  • 等等

展示

所有这些内容都将通过一个应用服务器进行展示和控制,最好是使用Django或TG。

灵感来源

3 个回答

0

你可能需要自己动手去实现你想要的功能,但可以从以下几个地方开始:

  • Valgrind(一个工具)
  • Luke Stackwalker
  • 还有很多其他的开源项目

另外,如果你的目标不是单纯地测量性能,而是想要提升性能的话,你可以从这个链接获取一些灵感,里面有这个例子展示了如何使用这些方法。

0

我不太确定你的问题具体是什么,不过如果你想分析Java(网页)应用的性能,可以使用netbeans profiler和profiler4j(在sourceforge上可以找到)。我用过这两个工具,觉得它们比eclipse tptp要好。

你可以看看 如何设置Eclipse TPTP

还有 http://profiler4j.sourceforge.net/

补充一下:抱歉,我刚注意到你把这个问题标记为Python相关,所以这个回答可能对你不太适用。

2

这周在PyCon大会上,有人讨论了现在Python中各种性能分析的方法。我觉得可能没有你想要的那么全面,但看看也许会有帮助。

你应该能在本周晚些时候在blip.tv上找到这场讲座的录像,链接在这里:http://blip.tv/search?q=pycon&x=0&y=0

撰写回答