我正在使用Rails 4.2和Ruby 2.2.0。最近,我注意到我的应用程序将在调用某个控制器后长时间挂起。这是一个已经开发了好几年的应用程序,我之前从未见过这种悬挂行为(我不幸地完全意识到自从它最后一次没有挂起后我做了什么改变)。
“hang”的意思是:不会加载任何页面(无法访问控制器,甚至基本上不会加载静态页面的默认主页)。我的日志都不会更新。标准输出未写入。该应用程序还有许多后台工作进程(由Resque管理),它们似乎也挂起了。此行为将一次持续几分钟。
为了缩小罪魁祸首,除了一个控制器外,我从我的应用程序中删除了所有内容。该控制器看起来像:
puts "Peforming"
respond_to do |format|
format.xml {
render :xml => "<Status>OK</Status>"
}
end
它将接受来自客户端的任何POST,并在打印消息后以“OK”响应。该应用程序托管在服务器上,我正在使用XML POST从本地计算机上尽可能快地使用它。点击不到一分钟后,应用程序将完全挂起,如上所述。
我也看过netstat,但没有看到任何异常。 TIME_WAIT状态下有很多连接,但我知道这很好。我也看了一眼顶部,即使悬挂,机器仍然是90%闲置。
最后,如果相关,这将在Amazon EC2上运行。