我遇到了Rails应用程序中的问题。 几个小时后,应用程序似乎开始挂起,我无法找到问题所在。日志文件中没有任何相关内容,但是当我尝试从浏览器中获取URL时没有发生任何事情(例如mongrel接受请求但无法响应)。
您认为我可以测试什么来了解问题所在?
感谢您的帮助!
答案 0 :(得分:1)
我可能因为躲避这个问题而被拒绝,但我最近从nginx + mongrel转移到了mod_rails并且给我留下了深刻的印象。转向更简单的设置无疑将使我在将来免于头痛。
这是一个非常简单的过渡,我强烈推荐它。
答案 1 :(得分:0)
你确定问题是由Mongrel造成的吗?您是否尝试在WEBrick下运行应用程序?
答案 2 :(得分:0)
有a few things you can check,但是由于您说日志中没有任何内容可以指示错误,因此在使用Logger
类的日志轮换功能时,您可能会遇到错误。它导致杂种锁定。不要依赖Logger
来轮换日志,而应考虑使用logrotate
或其他一些外部日志轮换服务。
答案 3 :(得分:0)
每次都会在一定数量的小时/天内发生这种情况吗?你有多少RAM?
答案 4 :(得分:0)
我有同样的问题。我把它缩小的几个选项是MySQL适配器相关的。我在Red Hat Enterprise Linux 4(或5)上运行,应用程序会在给定的空闲时间后挂起。
一个建议的解决方案是编译本机MySQL绑定,我一直在使用纯Ruby。
另一种方法是将MySQL适配器上的超时设置为高于连接空闲时的超时。 (我没有记录特定的配置,但我记得它在environment.rb中,它是mysql适配器中的一些类变量。)
我不记得,如果其中任何一个解决方案修复它,我们在此之后不久就转移到Ubuntu并且从那时起就没有问题。
答案 5 :(得分:0)
查看Mongrel常见问题解答: http://mongrel.rubyforge.org/wiki/FAQ
根据我的经验,mongrel挂起时:
ActiveRecord::Base.verification_timeout = 14400
(这在FAQ的部署部分进一步说明)答案 6 :(得分:0)
我们遇到过同样的问题。首先,安装mongrel_proctitle gem
http://github.com/rtomayko/mongrel_proctitle/tree/master
这个gem /插件允许你通过“ps”查看杂种进程,你可以看到Mongrel是否挂起。我们在Mongrel看到的一个问题是,它会愉快地接受连接并将它们排列,然后楔入它们自己。这个插件将帮助您查看Mongrel何时被楔入,但是您必须使用另一个监控应用程序来实际重启一个楔形Mongrel,例如Monit或God
您可能还想考虑在Mongrels前面放置一个更平衡的反向代理,这是HAproxy,而不是nginx,Apache或Lighttpd。通过在HAproxy中设置“maxconn 1”,您可以确保HAproxy与Mongrel维护队列。其他反向代理(nginx,Apache,Lighttpd)只进行循环,这意味着他们可以无意中加载你的Mongrel队列。
我个人的选择是上帝,因为它更灵活。
tl; dr安装这个gem插件并密切关注你的Mongrels。试试Apache + Phusion Passenger。
答案 7 :(得分:0)
不幸的是,Rails(以及Mongrel)随着时间的推移耗尽了大量内存并且崩溃是一个众所周知的问题(50K + Google条目用于“Ruby,rails,crashing,memory”)。当前的ruby解释器具有sometimes simply fails entirely to give memory back to the system的属性 - 它可以重用它拥有的内存,但它不会放弃它。
在生产环境中有许多监控,查杀和重启Mongrel实例的方案 - 例如:(随意选择)rails monitor。直到问题得到更果断的解决,其中一个可能是你最好的选择。