Capistrano部署后,Rails应用程序(Nginx / Passenger)冻结20分钟以上

问题描述 投票:0回答:1

我有一个Rails 4应用,该应用遇到了Capistrano部署问题。 每次Capistrano部署后,Web应用程序会挂起很长时间(HTTP请求被暂停,无法通过浏览器访问网站), 有时会长达20分钟甚至30分钟。

我想认为部署是相当标准的。 通用程序为:

  • git push送到远程服务器
  • 标准capistrano :publishing
  • capistrano/bundler捆绑安装
  • touch tmp/restart

Capfile没有任何棘手的Capfile

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'

运行cap server deploy成功完成,并在大约10秒内返回。 但是,完成之后,服务器将关闭并保持很长时间(“冻结”),直到最终恢复正常并部署新版本。

发生这种情况时,我能够ssh进入服务器(尽管提示非常缓慢),并且我可以看到ruby / Passenger RackApp耗尽了其所有资源:

最佳:

>top
PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
.. .. ..   ..  ..  . 50.1 18.4 ..    ruby
.. .. ..   ..  ..  . 49.8 18.7 ..    ruby
.. .. ..   ..  ..  . 49.9 21.1 ..    ruby
.. .. ..   ..  ..  . 49.5 20.9 ..    ruby

该服务器具有两个核心,因此它是所有可用的CPU。

ps aux展示了几个来宾Passenger RackApp的实例:

>ps aux
USER PID  %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user .... 11.0 18.3 ..  ..  ..  ..   ..    2:05 Passenger RackApp: /www/myRailsApp/current
user .... 12.1 18.3 ..  ..  ..  ..   ..    1:35 Passenger RackApp: /www/myRailsApp/current
user .... 12.1 20.3 ..  ..  ..  ..   ..    1:33 Passenger RackApp: /www/myRailsApp/current
user .... 14.7 21.0 ..  ..  ..  ..   ..    1:21 Passenger RackApp: /www/myRailsApp/current
user .... 5.6 12.5  ..  ..  ..  ..   ..    0:24 Passenger RackApp: /www/myRailsApp/current
user .... 5.8 6.6   ..  ..  ..  ..   ..    0:07 Passenger AppPreloader: /www/myRailsApp/current
user .... 0.7 7.6   ..  ..  ..  ..   ..    0:01 Passenger RackApp: /www/myRailsApp/current

乘客状态通常如下所示:

>passenger-status
Version : 4.0.41
Date    : 2014-07-23 15:25:11 +0000
Instance: 19086
----------- General information -----------
Max pool size : 6
Processes     : 3
Requests in top-level queue : 0

----------- Application groups -----------
/www/myRailsApp/current#default:


  App root: /www/myRailsApp/current
  Requests in queue: 0
  * PID: 3173    Sessions: 1       Processed: 1       Uptime: 3m 7s
    CPU: 70%     Memory  : 426M    Last used: 3m 7s ago
  * PID: 3194    Sessions: 1       Processed: 1       Uptime: 3m 1s
    CPU: 69%     Memory  : 361M    Last used: 3m 0s ago
  * PID: 3220    Sessions: 1       Processed: 1       Uptime: 2m 40s
    CPU: 67%     Memory  : 349M    Last used: 2m 39s ago

日志(nginx,rails)不显示任何内容。

版本:

Rails 4.1.0
nginx version: nginx/1.4.1
Passenger Version : 4.0.41
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]

我的主要问题是:

  1. 这到底是怎么回事?
  2. 如何更有效地诊断?
  3. 如何设置capistrano,使其迅速部署?
ruby-on-rails deployment nginx capistrano passenger
1个回答
0
投票

似乎Capistrano部署中的某些操作导致您的应用程序(而不是Passenger本身)进行了一些耗时20分钟的繁重处理。 您不仅可以在CPU使用率中看到,而且可以在“会话:1”标签中看到。 这意味着当时所有这些进程都在忙于处理请求

诊断此问题的最佳方法是找出您的应用程序在做什么。 阅读Phusion博客以了解操作方法。 特别是,您可以使用SIGQUIT技巧来获取进程的回溯。

您还可以运行passenger-status --show=requests来查看您的应用程序遇到了哪些请求。

© www.soinside.com 2019 - 2024. All rights reserved.