机架进程接管乘客下的 CPU

机架进程接管乘客下的 CPU

我有一个运行以下堆栈的 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 的应用程序进程。如果它正在运行或挂起,那么我的应用程序一定有问题。

要找出它挂在哪里,我最好的选择是什么?

答案1

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

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

您的系统将拥有多个 Rack 进程,因为每个进程都是单线程的,并且每次只能处理一个请求。Passenger 的工作是代理请求并将其发送到 Rack 进程,并根据需要启动/停止/回收这些 Rack 进程。通常,Rack 进程需要 5-45 秒才能启动,具体取决于您的应用的复杂程度,因此即使不处理请求,您通常也会有几个进程在运行。

相关内容