Chr*_*ngs 8 ruby memory-leaks passenger ruby-on-rails-3.2
上周我们将一个运行在Rails 3.0.1上的小项目升级到Rails 3.2.2.
升级后不久,我们偶尔认识到,每天2-3次,我们看到了一个巨大的Phusion Passenger进程(1-5 GB).
我们正在运行Phusion Passenger 3.0.11和Ruby 1.9.3-p0.我们已经尝试过不同的Ruby版本(1.9.2-p290和1.9.3-p125)而没有成功.
之后,我们尝试使用Oink跟踪内存使用情况.不幸的是,Oink没有显示内存膨胀的原因 - 大型进程似乎不再写入日志文件了.
当我们降级回Rails 3.0.1时,问题就消失了.有没有人有类似的问题?我们确实检查了代码是否存在可能的内存泄漏,例如ActiveRecord实例太多,但没有发现任何内存泄漏.
你觉得尝试Unicorn而不是Passenger是值得的吗?或者我们可能遇到同样的问题?
有关如何跟踪内存泄漏的任何建议都是受欢迎的.我们已经设置了newrelic,但它没有显示有关内存泄漏的详细信息.
我有兴趣了解乘客内存统计信息显示的内容以及您为 PassengerMaxPoolSize、PassengerPoolIdleTime 和任何其他乘客设置设置的乘客内存类型。
你是如何升级乘客的?
你的 apache 设置是什么样的?预叉还是工人?
我怀疑您看到的 gc 性能很差,尝试通过将其放在乘客使用的红宝石周围的包装中来调整它们:
#!/bin/sh
export RUBY_HEAP_MIN_SLOTS=600000
export RUBY_GC_MALLOC_LIMIT=59000000
export RUBY_FREE_MIN=200000
exec "/usr/bin/ruby" "$@"
Run Code Online (Sandbox Code Playgroud)
它应该可以解决由于 ruby gc 默认值不佳而导致的一些性能问题。