我有一个Rails 4应用程序遇到capistrano部署问题。在每次capistrano部署之后,Web应用程序会挂起(http请求处于暂停状态,并且无法通过浏览器访问网站)很长一段时间,在某些情况下最多可达20或甚至30分钟。 < / p>
我认为部署是相当标准的。一般程序是:
git push
回购到远程服务器: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]
我的主要问题是:
答案 0 :(得分:0)
似乎Capistrano部署中的某些内容会导致您的应用(而不是乘客本身)进行一些需要20分钟的繁重处理。您不仅可以看到CPU使用率,还可以看到“Sessions:1”标签。这意味着当时所有这些进程都忙于处理请求
诊断此问题的最佳方法是找出您的应用正在做什么。阅读the Phusion blog以了解如何执行此操作。特别是,您可以使用SIGQUIT技巧为您的流程获取回溯。
您还可以运行passenger-status --show=requests
以查看您的应用所针对的请求。