在ruby 1.9.3上运行rails时出现分段错误

时间:2014-01-31 16:01:58

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

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

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

在我们的几台机器上投入一些流量后,我们开始注意到一些非常奇怪的错误。

诸如随机方法没有被明确地拥有它们的对象定义,实例变量在AR关联内是nil,而对象被随机替换为'false'。只是奇怪的行为。

检查apache的日志给了我们另一些信息,即随着这些错误的出现,通常情况下,他们各自的流程也会在应用程序的随机位上流传。

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

在测试过程中没有发生过这种情况,所以到目前为止,唯一的“可靠”再现方法就是在相应的机器上投放流量,看看他们何时/是否开始表现出这种行为。

完成所有这些之后,这里列出了我们迄今为止已经排除的事项:

  • 乘客的垃圾收集
  • rails 3本身(显然我们之前已经得到了这些,但它们相距甚远,不会引发任何警报)
  • 序列化/推送进出memcached的内容
  • libxml - 有一些关于版本2.5.0导致内存损坏的报告,升级到2.7.0并没有真正有所作为
  • 关闭预链接(这会导致内存损坏,按https://www.ruby-forum.com/topic/205897

将GC设置恢复到库存似乎已经缓解了这个问题,但我们在这方面确实没有任何结论。似乎更多的集合会导致问题的发生率降低。

有关可能导致此问题或我们可以用来帮助我们查明问题的任何想法?

1 个答案:

答案 0 :(得分:1)

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

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

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

相关问题