【问题标题】:Is there anything inherently different in ruby 2.1.2 that would cause it to perform substantially worse than ruby 1.9.3?ruby 2.1.2 有什么本质上的不同会导致它的性能比 ruby​​ 1.9.3 差很多吗?
【发布时间】:2014-09-13 23:43:30
【问题描述】:

我们有一个较旧的应用程序在 ruby​​ 1.9.3 和 rails 3.2.17 上运行 - 在乘客 4 上。当我升级到 ruby​​ 2.1.2 时,平均事务运行速度总体上慢了大约 50%。谁能想到与这些不同版本有关的任何广泛理由?我试过乘客、独角兽和美洲狮,结果都差不多。

【问题讨论】:

  • 没有我知道的原因,而是有相反的经历。我们已将基于 Rails 3.2.x 的项目从 1.9.3 移至 2.1.x,并获得了显着的性能提升,内存消耗增加了约 10%。
  • 事实证明,作为迁移的一部分,有一个额外的代码更改导致大部分速度变慢。一旦我们解决了这个问题,我们看到了将近 30% 的改进!答案中建议的调整提供了大约 10%。

标签: ruby-on-rails ruby


【解决方案1】:

在 Ruby 2+ 中存在一些与内存消耗相关的问题,而 1.9 中不存在这些问题。内存流失和频繁的垃圾收集可能会使您的应用程序运行得更慢。看看http://www.omniref.com/blog/blog/2014/03/27/ruby-garbage-collection-still-not-ready-for-production/ 和今年早些时候关于 Hacker News 的讨论 (https://news.ycombinator.com/item?id=7488233),以及 Sam Saffron 的回复:http://samsaffron.com/archive/2014/04/08/ruby-2-1-garbage-collection-ready-for-production

【讨论】:

  • 这是一些过时的信息,大部分 GC 问题已在 2.1.2 中修复。
  • 尽管这些问题应该在 Ruby 2.1.2 中得到解决,但我发现使用 RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.3 并切换回乘客解决了我所看到的性能问题。我试图深入挖掘,但经过几个小时后,不得不收工。谢谢!
猜你喜欢
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
相关资源
最近更新 更多