【问题标题】:Segmentation faults when running rails on ruby 1.9.3在 ruby​​ 1.9.3 上运行 rails 时出现分段错误
【发布时间】:2014-01-31 16:01:58
【问题描述】:

运行一个相当大的 rails 应用程序,我们最近开始将其升级到 rails 3。

我们的堆栈是运行在 apache 之上的 ruby​​-1.9.3p484、rails 3.2.16 和乘客 4.0.23。

在我们的几台机器上产生了一些流量后,我们开始注意到出现了一些非常奇怪的错误。

诸如随机方法未定义在显然具有它们的对象上,实例变量在 AR 关联中为零,以及对象只是被随机替换为“假”。到处都是奇怪的行为。

检查 apache 的日志为我们提供了另一条信息,即当这些错误出现时,它们各自的进程通常也会在应用程序的随机位上崩溃。

有时它只是一个 ruby​​ 节点作为 null 传入,有时它只是一些随机字符串溢出,只是随机的东西被弄乱了。

在测试过程中这些都没有发生,所以迄今为止唯一“可靠”的重现这种情况的方法就是向相应的机器抛出流量,看看它们何时/是否开始表现出这种行为。

在经历了所有这些之后,以下是我们迄今为止已排除的事情的清单:

  • 乘客的 oob 垃圾回收
  • rails 3 本身(显然我们之前也得到过这些,但它们之间的距离足够远,不会引发任何警报)
  • 序列化/将东西推入和推出 memcached
  • libxml - 有一些关于版本 2.5.0 导致内存损坏的报告,升级到 2.7.0 并没有真正产生影响
  • 关闭预链接(这可能会导致内存损坏,根据 https://www.ruby-forum.com/topic/205897

将 GC 设置恢复为 stock 似乎已经缓解了这个问题,但我们在这方面并没有任何决定性的结论。似乎收集越多,问题的发生率就越低。

对可能导致此问题的原因有什么想法,或者我们可以用来帮助我们查明问题吗?

【问题讨论】:

  • 试试 Nginx 和 Unicorn 看看是否还有问题。我已经使用了很长一段时间的Passenger,但不知道我在生产中遇到的问题的根源(直到我摆脱了Passenger)
  • @Abdo 是的,似乎这也是我们的解决方案。太奇怪了。
  • 是的.. 自从我做出改变以来,我从未如此快乐:-)

标签: ruby-on-rails ruby ruby-on-rails-3 passenger memory-corruption


【解决方案1】:

我在测试运行时也有 1.9.3-p484 段错误 at_exit,但我还没有调查它。在我的情况下,它似乎是由测试套件的某些依赖项触发的。

我们在 Rails 3 上的另一个项目也遇到了问题,最终放弃了他们对 Rails 3 的端口并坚持使用 2.3):

您是否尝试过在 Apache/Passenger 之外运行该应用程序?

【讨论】:

  • 是的,正准备更新这个。出于某种奇怪的原因,我们的修复程序最终在独角兽下运行。仍然不确定这将如何影响它,但你去吧。
  • 嗯,有很多原因(:例如:blog.phusion.nl/2012/05/09/…
猜你喜欢
  • 2012-03-28
  • 2012-04-28
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
相关资源
最近更新 更多