【发布时间】:2014-07-23 15:53:30
【问题描述】:
我有一个 Rails 4 应用程序遇到 capistrano 部署问题。每次 capistrano 部署后,Web 应用程序都会长时间挂起(http 请求处于暂停状态,无法通过浏览器访问网站),在某些情况下长达 20 甚至 30 分钟。
我认为部署是相当标准的。一般程序是:
-
git push远程服务器的仓库 - 标准capistrano
:publishing - 使用
capistrano/bundler捆绑安装 touch tmp/restart
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]
我的主要问题是:
- 这里到底发生了什么?
- 如何才能更有效地诊断?
- 如何设置 capistrano 以使其快速部署?
【问题讨论】:
标签: ruby-on-rails deployment nginx capistrano passenger