首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Rails 3.0升级到Rails 3.2 (Ruby 1.9.3 +乘客)后的巨大内存泄漏/膨胀

从Rails 3.0升级到Rails 3.2 (Ruby 1.9.3 +乘客)后的巨大内存泄漏/膨胀
EN

Stack Overflow用户
提问于 2012-02-29 21:32:09
回答 2查看 1.3K关注 0票数 8

上周,我们将一个运行在Rails 3.0.1上的小项目升级到了Rails 3.2.2。

升级后不久,我们意识到,偶尔,每天2-3次,我们会看到一个巨大的Phusion乘客进程(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,但它没有显示有关内存泄漏的详细信息。

EN

回答 2

Stack Overflow用户

发布于 2013-03-15 23:03:06

如果这是兼容Red Hat的Linux,您可以使用SystemTap。我不确定在Debian/Ubuntu系统上是否可以使用SystemTap,如果没有的话,还有一种叫做DTrace的替代方案。这里有一些文章-我非常成功地跟踪了几个回归,尽管这些都不是内存问题(也许你可以找到一个STP脚本可以为你做这件事)。点击这里阅读:

http://lukas.zapletalovi.com/2012/02/peek-into-your-ruby-app-with-systemtap.html http://lukas.zapletalovi.com/2012/01/probing-ruby-apps-with-systemtap-in.html http://sourceware.org/systemtap/wiki/RubyMarker

最后一个链接展示了可以在Ruby语言的SystemTaps中使用的探测器。有一些想法,比如gc运行或内存分配,可以帮助你。祝好运!

票数 1
EN

Stack Overflow用户

发布于 2012-11-13 14:32:39

我想知道乘客内存统计数据显示了什么,以及您为PassengerMaxPoolSize PassengerPoolIdleTime和任何其他乘客设置的乘客内存类型。

您如何升级passenger?

你的apache设置是什么样的?prefork还是worker?

我怀疑你看到了糟糕的gc性能,尝试通过将以下代码放在passenger使用的ruby的包装器中来调整它们:

代码语言:javascript
复制
#!/bin/sh
export RUBY_HEAP_MIN_SLOTS=600000
export RUBY_GC_MALLOC_LIMIT=59000000
export RUBY_FREE_MIN=200000
exec "/usr/bin/ruby" "$@"

它应该可以修复由于糟糕的ruby gc默认设置而导致的一些性能问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9500083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档