Rails应用程序挂起,Ruby使用100%的CPU

时间:2010-01-07 19:42:58

标签: ruby-on-rails ruby apache apache2 passenger

我有一个运行Phusion Passenger的apache2服务器。在这台机器上我有两个虚拟主机设置,每个看起来像这样(第二个虚拟主机的路径不同......但其他指令是相同的)

    ServerName beta.mysite.us     DocumentRoot“/ var / www / beta / mysite / public”

<Directory "/var/www/beta/mysite/public">
    RewriteEngine on
    AllowOverride All
    Options FollowSymLinks
</Directory>
# http://www.modrails.com/documentation/Users guide.html
PassengerAppRoot "/var/www/beta/mysite"
RailsEnv development
PassengerMaxPoolSize 6
PassengerDefaultUser mysite
# PassengerHighPerformance does come at a trade off of lack of support for mod_rewrite
PassengerHighPerformance off
RailsSpawnMethod conservative
RailsFrameworkSpawnerIdleTime 0
RailsAppSpawnerIdleTime 0
PassengerPoolIdleTime 300

ErrorLog "/var/log/httpd/mysite-beta-error_log"
CustomLog "/var/log/httpd/mysite-beta-access_log" common

Apache开始很好。我可以去其中一个虚拟主机,它将加载Rails并工作。当我转到第二个虚拟主机时,一个ruby进程产生(根据ps awuxf,“Rails:/ var / www / mysite / current”)并使用100%CPU。这个过程永远不会退出。此时虚拟主机都没有响应。如果我杀死了令人讨厌的ruby进程,另一个ruby进程会替换它并使用100%的cpu。如果我杀了这些进程大约5-6次,那么两个虚拟主机都会响应但是它们会以某种方式运行相同的Rails应用程序?!

我在这台机器上有另一个虚拟主机,没有设置与phusion乘客..这个从来没有出现任何问题。

非常感谢任何帮助/想法!

5 个答案:

答案 0 :(得分:0)

我建议切换到nginx

答案 1 :(得分:0)

我遇到了与phusion乘客类似的问题,但没有成功调试。后来,我用mod_proxy切换到apache2 + mongrel。我已经看到了nginx的最佳稳定性。 nginx FTW:)

答案 2 :(得分:0)

显而易见的事情是检查你没有任何无意的无限循环或无法在你的任何应用程序中完成条件。在一张太大而不适合记忆的桌子上偶然发现(全部)是很容易的。

它是否会立即堵塞,或者您必须做些什么来触发它?例如,加载特定页面,或根本不加载页面。初始化程序中可能存在导致问题的原因。

能够启动脚本/控制台始终是一个好兆头,特别是如果您可以加载记录。您的描述中没有很多信息。 'ps aux'输出的复制粘贴会有所帮助。

答案 3 :(得分:0)

你有可能有一些代码造成这种情况吗?我们有许多apache /乘客安装。你的代码比aapache / passenger更有可能。

答案 4 :(得分:0)

(提醒我未来的自我)

我最近继承了在Passenger和Apache2上运行的Rails 2.3.x / Ruby 1.8.7应用程序。我将RubyGems从旧的1.3.x更新到1.6.2,并立即注意到当乘客装载时红宝石过程达到100%。降级到RubyGems 1.5.3解决了这个问题。