我有一个运行以下堆栈的 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-status
,passenger-memory-stats
这表明这些是 Passenger 的应用程序进程。如果它正在运行或挂起,那么我的应用程序一定有问题。
要找出它挂在哪里,我最好的选择是什么?
答案1
Rack 进程是运行您站点代码的应用服务器,而不是 Passenger。我怀疑最近的升级和所有常见的故障排除都存在问题。以下是系统上的请求。
user -> nginx -> passenger -> Rack process -> generates page
您的系统将拥有多个 Rack 进程,因为每个进程都是单线程的,并且每次只能处理一个请求。Passenger 的工作是代理请求并将其发送到 Rack 进程,并根据需要启动/停止/回收这些 Rack 进程。通常,Rack 进程需要 5-45 秒才能启动,具体取决于您的应用的复杂程度,因此即使不处理请求,您通常也会有几个进程在运行。