【问题标题】:Best practices for capturing and logging performance of software components捕获和记录软件组件性能的最佳实践
【发布时间】:2011-05-20 02:14:05
【问题描述】:

我正在寻找好的(最好是即插即用)解决方案来对我正在开发的软件进行诊断。我正在开发的软件有几个需要大量计算资源的组件,因此我们试图捕捉这些组件的性能有两个原因:1)估计所需的计算资源,从而估计运行软件的成本,以及 2)量化组件的“改进”是什么(即,如果我们修改代码并提高速度,那么它就是一种改进)。我们的应用程序由搜索引擎和许多其他组件组成,了解搜索引擎的速度对最终用户来说也很重要。

似乎很难找到解决方案,因为我不确定如何正确定义我的问题。但到目前为止我发现的似乎是基本的错误记录技术。一个旨在从数据中运行统计数据(例如统计回归)的解决方案将是最好的。也许单元测试框架有内置的测试计时器,但我们需要从应用程序的实时运行中捕获数据,以适应众多不同的场景。

所以真的有两个问题:

1) 是否有针对此类测试的预定义解决方案?

2) 对这类数据进行统计回归有什么好的参考吗?假设我们捕获了脚本的执行时间和输入数据的大小(例如查询)。我们可以对数据大小进行时间回归,以了解更改数据大小对执行时间的影响。但是这些类型的回归很棘手,因为不清楚所有相关变量是什么。任何关于分析性能数据的参考都非常好,我相信对很多人都有好处!

谢谢 马特

【问题讨论】:

  • 您要查找的词是“profiler”。
  • gprof,甚至更好的 Intel Vtunes,都可以做到这一点
  • 好的,profiler 就是我要找的词!谷歌搜索“分析器”后,我找到了许多开发环境的解决方案。

标签: performance statistics diagnostics


【解决方案1】:

像这样的大型应用将进行大量非 CPU 处理, 所以找到优化点 您将需要基于挂钟的采样,而不是基于 CPU 的采样。

gprof and some others only sample on CPU time,因此他们看不到不必要的 I/O 或其他系统调用。 如果您确实设法找到并消除了 CPU 密集型性能问题,那么 I/O 密集型问题只会占更大的比例。

看看Zoom。 它是一个堆栈采样器,按代码行报告该行在堆栈上的挂钟时间百分比。 任何值得优化的代码点都可能是这样的一行。 它还有一个漂亮的蝴蝶视图,用于浏览调用图。 (你不希望调用图作为一个整体。这将是一个毫无意义的老鼠窝。)

【讨论】:

  • 谢谢,这是一个很好的开始。我主要在寻找 php 和 java 的良好性能指标,我不确定 Zoom 或 gprof 是否适用于这两者。尽管如此,阅读这些文档给了我一些很棒的信息。
  • @Matt:不客气。当目标是让代码运行得更快(而不是仅仅测量它有多快)时,random pausing 是一种非常有效的独立于语言的技术。
  • Mike,知道这些或其他分析器是否可以捕获自定义变量?例如,我们需要记录正在处理的数据量、服务器类型(因为我们将尝试使用不同的服务器)等。谢谢!
  • @Matt:我经常不得不说测量和诊断是不同的任务。对于测量,日志记录和/或挂钟(不是 CPU)分析器可能是您需要的(最有可能是仪器类型)。对于诊断,按行报告百分比的挂钟堆栈采样器是一个更好的工具。一个简单的例子是一个运行时间比必要时间长得多的循环。单个堆栈样本不会测量它,但它找到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
相关资源
最近更新 更多