Ruby on rails 为什么ruby进程的CPU占用率为100%呢

Ruby on rails 为什么ruby进程的CPU占用率为100%呢,ruby-on-rails,ruby,passenger,Ruby On Rails,Ruby,Passenger,我有一个rails应用程序(2.3.5),运行在VPS上,有4个内核@2 GHz和4GB内存。我在Ruby Enterprise(1.8.7-2010.01)上运行nginx(0.7.61)和phusion passenger(2.2.14),最大池大小设置为30。我的问题是,似乎每个执行rails请求的ruby进程都以接近100%的cpu运行。如果我运行TOP,则每次显示器刷新时它们都会下降,因此它们不会挂起,但它们仍以100%的速度运行 我有办法把这个拿下来吗?或者至少弄清楚什么部分的代码会

我有一个rails应用程序(2.3.5),运行在VPS上,有4个内核@2 GHz和4GB内存。我在Ruby Enterprise(1.8.7-2010.01)上运行nginx(0.7.61)和phusion passenger(2.2.14),最大池大小设置为30。我的问题是,似乎每个执行rails请求的ruby进程都以接近100%的cpu运行。如果我运行TOP,则每次显示器刷新时它们都会下降,因此它们不会挂起,但它们仍以100%的速度运行

我有办法把这个拿下来吗?或者至少弄清楚什么部分的代码会影响CPU?这是正常的行为吗

以下是最重要的输出:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                     
 2427 psadmin   25   0 91904  76m 2696 R  100  1.9 739:05.96 Rails: /var/www/apps/main_rails_app/current                                                                                                  
 3457 psadmin   25   0 98180  82m 2532 R  100  2.0 711:21.91 Rails: /var/www/apps/main_rails_app/current                                                                                                  
 2415 psadmin   25   0 93952  77m 2708 R   99  1.9 727:49.31 Rails: /var/www/apps/main_rails_app/current                                                                                                  
 3455 psadmin   25   0 99204  83m 2528 R   69  2.0 726:04.70 Rails: /var/www/apps/main_rails_app/current                                                                                                  
 2791 psadmin   16   0 98044  81m 2492 S   31  2.0   0:10.16 Rails: /var/www/apps/main_rails_app/current                                                                                                  
 8034 psadmin   15   0  8160 3656 1772 S    1  0.1   0:35.39 nginx: worker process                                                                                                                        
 8035 psadmin   15   0  8324 3696 1732 S    0  0.1   0:31.34 nginx: worker process                                                                                                                        
 2588 psadmin   15   0  197m 183m 2712 S    0  4.5   1:02.16 Rails: /var/www/apps/main_rails_app/current      
谢谢

编辑:尝试使用如下所述的跟随叉进行strace。这是反复转储的输出:

sudo strace -f -p 3455

clock_gettime(CLOCK_MONOTONIC, {394577, 508326476}) = 0
select(0, [], [], [], {0, 0})           = 0 (Timeout)
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()   

检查日志中是否有可疑行为。一般来说,rails确实会占用大量cpu资源……您也可以尝试将strace指向有问题的PID。

我尝试过strace,但它从未显示任何输出,只是它绑定到该PID。我认为这可能是因为pid不存在很长时间,但是当它存在的时候,它是100%。确保您遵循forks(-f或-f或其他)。或者尝试一个不同的pid:)我在两个不同的服务器上遇到了相同的问题:Rails 2.3.5 passenger 2.2.5 ruby 1.8.7(2009-12-24 patchlevel 248)[x86_64-linux],MBARI 0x6770,ruby Enterprise Edition 2010.01我看到了类似的问题,我的代码中有一些调用DateTime.now的bug,现在在一个循环中,这解释了strace输出
stat(“/etc/localtime”,{st_mode=S_IFREG | 0644,st_size=3543,…})=0
计划推送一个修复程序来停止重复调用,看看它是否有影响。Ruby使用
SIGVTALRM
在线程之间切换上下文。这没什么不正常的。当然,除非这是strace的唯一输出,而且它经常重复出现。