如何找到我的 Ruby 应用程序中的性能瓶颈?

Posted

技术标签:

【中文标题】如何找到我的 Ruby 应用程序中的性能瓶颈?【英文标题】:How can I find the performance bottlenecks in my Ruby application? 【发布时间】:2009-01-26 15:15:11 【问题描述】:

我编写了一个 Ruby 应用程序,它可以解析来自不同格式 html、xml 和 csv 文件的大量数据。如何找出代码的哪些区域花费的时间最长?

有没有关于如何提高 Ruby 应用程序性能的好资源?或者您是否有始终遵循的性能编码标准?

例如,你总是用

加入你的字符串吗?
output = String.new
output << part_one
output << part_two
output << '\n'

或者你会使用

output = "#part_one#part_two\n"

【问题讨论】:

【参考方案1】:

嗯,有一些众所周知的做法,比如字符串连接比“#value”慢得多,但为了找出脚本在哪里消耗了大部分时间或超过了所需时间,你需要进行分析.有一种名为 ruby​​-prof 的红宝石宝石。分析器甚至可以让您注意到那些可能很少发生的性能问题。我一直在使用它,发现它很有帮助。这里有一些关于它的信息,直接来自它的official site

ruby-prof 是一个快速的代码分析器 红宝石。其特点包括:

速度 - 它是一个 C 扩展,因此比 标准 Ruby 分析器。

模式 - Ruby prof 可以测量许多不同的参数, 包含 调用时间、内存使用和对象分配。

报告 - 可以生成文本和交叉引用的 html 报告

Flat Profiles - 类似于标准 Ruby 生成的报告 分析器

图表配置文件 - 类似于 GProf,这些显示方法运行的时间, 哪些方法调用它,哪些 它调用的方法。

调用树配置文件 - 以调用树格式输出结果 适用于 KCacheGrind 分析 工具。

线程 - 支持同时分析多个线程

递归调用 - 支持分析递归方法调用

【讨论】:

【参考方案2】:

您可以使用标准Benchmark module 测试各个代码段的性能。

您还可以在 Ruby 的不同实现(例如 1.9、Rubinius)上测试您的代码,看看这是否加快了速度。

当然,如果您的问题本质上是算法问题,那么担心字符串连接速度之类的问题就没有太大意义了...

【讨论】:

【参考方案3】:

字符串拼接的答案在这里:https://web.archive.org/web/20090122123342/http://blog.cbciweb.com/2008/06/10/ruby-performance-use-double-quotes-vs-single-quotes

【讨论】:

【参考方案4】:

除了上面写的内容,我还建议观看Scaling Ruby 截屏视频。它有一些关于如何编写更快的 Ruby 代码的有趣提示和技巧。

【讨论】:

感谢您的提示。那些 Rails Envy 的家伙太棒了。【参考方案5】:

还有一组用于 Ruby 的 dTrace 工具,您可以在 dTraceToolkit 中使用

【讨论】:

以上是关于如何找到我的 Ruby 应用程序中的性能瓶颈?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby Web事务监控

怎样查出SQLServer的性能瓶颈

突破性能瓶颈!ElasticSearch百亿级数据检索优化案例

Java 应用程序分析和测试

分析Ruby代码

性能-如何根据线程和进程找到性能瓶颈或者问题点