在Passenger下接pipeCPU的机架进程

我有一个Spree网站运行下面的堆栈:

  • Nginx 1.0.8
  • 乘客3.0.9
  • Ruby 1.9.2-p290
  • 机架1.3.6
  • Rails 3.1.4
  • 施普雷河0.70.5

我最近从Spree 0.70.3升级,这也使Deface从0.7.x升级到0.8.0。 从那以后事情就非常不稳定了。

最近我们已经看到了一些CPU占用过程 ,这些过程在服务器上加载负载,并将整个过程扼杀在一起。 他们是Rack进程,看起来Passenger正在启动它们; 他们由site-runner用户拥有,该用户是拥有应用程序代码的非特许用户。 (Passenger自动运行站点代码作为拥有它的用户。)如果我重新启动Nginx并终止失控进程,它会有一段时间的帮助,但最终类似的进程会返回并重新陷入困境。

ETA:我现在正在查看passenger-statuspassenger-memory-stats passenger-status ,这表明这些是Passenger的申请stream程。 如果它逃跑或挂起,我的应用程序必须有一个问题。

什么是我最好的select找出这是挂在哪里?

机架进程是运行您的站点代码而不是Passenger的应用程序服务器。 我怀疑最近的升级和所有常见的故障排除问题。 以下是您的系统上的请求。

 user -> nginx -> passenger -> Rack process -> generates page 

你的系统将有多个Rack进程,因为每个进程都是单线程的,一次只能处理一个请求。 乘客的工作是代理请求并将其发送到机架进程,并根据需要启动/停止/回收这些机架进程。 一般来说,根据应用程序的复杂程度,一个Rack进程将需要5-45秒才能启动,所以即使不提供请求,通常也会运行一些进程。