运行一个相当大的铁路应用程序,我们最近四处升级到Rails3。
我们的堆栈是Ruby-1.9.3p484,Rails 3.2.16和乘客4.0.23在Apache的顶部运行。
在我们的几台机器上投掷了一些流量后,我们开始注意到一些非常奇怪的错误。
诸如未在显然具有它们的对象上定义的随机方法之类的东西,实例变量在ar的内部关联中为nil,并且对象只是被" false"随机替换。
围绕着奇怪的行为。检查Apache的日志为我们提供了另一个信息,即,随着这些错误的到来,这些错误常常在应用程序的随机位上也将其各自的流程都重复。
有时候,这只是一个红宝石节点,以null为单位,而其他时候,这只是一些随机的字符串溢出,只是随机的东西被弄乱了。
这一切都没有发生在测试过程中,因此迄今为止唯一的"可靠"重现方式就是向各自的机器投掷流量,看看何时/是否开始表现出这种行为。
经历了所有这些,以下是我们现在排除的事情的列表:
- 乘客的OOB垃圾收集
- rails 3本身(显然我们也以前也得到了这些
- 序列化/将事物进出,
- libxml-有一些关于2.5.0版的报道,导致内存损坏,升级到2.7.0并没有真正有所作为
- 关闭预链接(这可能会导致内存损坏,https://www.ruby-forum.com/topic/205897)
将GC设置返回股票似乎已经缓解了这个问题,但在这方面我们没有任何结论性。尽管有更多收集导致该问题的发生率较低。
对可能导致这一原因的任何想法,或者我们可以用来帮助我们查明问题?
我在测试运行中也有1.9.3-p484 segfault at_exit,但我还没有研究过。就我而言,它似乎是由测试套件的某些依赖项触发的。
我们还遇到了Rails 3上的另一个项目的问题,最终将其端口放在Rails 3并坚持2.3):
):您是否尝试过在Apache/乘客之外运行该应用?