Rails Puma 偶尔超时
Rails with Puma occasional timeout
我在远程服务器上有两个 Rails 应用程序(生产环境和暂存环境)。
我目前遇到一个奇怪的问题,Puma 有时 在我完成部署(通过 cap deploy)后给我超时。这种情况已经发生了一段时间,而且越来越频繁。每当发生这种情况时,我都需要重新启动 Puma 服务器(从 cap puma:stop
和 cap puma:start
),或者手动执行 kill -9 <pid of puma instance>
。但是,在这两种情况下,我都需要首先从 shared/tmp/sockets
目录中 rm puma.sock
。
另一方面,我的生产环境没有遇到这个问题。它们之间的区别只是提交次数,我的暂存环境提前了几个(~50)次提交。早些时候,当我将暂存合并到生产并部署时,同样的问题出现在生产中。所以我将我的产品回滚到以前的版本,重新启动 Puma,然后问题就消失了。
注意: cap puma:restart
不知何故无法解决这个问题;我必须杀死当前的 Puma 实例,然后启动一个新实例才能解决此问题。
我当前的设置是:
- Rails 4.1
- 彪马
- Nginx
- 卡皮斯特拉诺 3
在错误发生时,Rails 日志中没有任何记录,但 Nginx 记录了一些错误:
upstream timed out (110: Connection timed out) while reading response header from upstream
等待 60 秒后,显示第 500 页。
recv() failed (104: Connection reset by peer) while reading response header from upstream
立即显示 500 页。
connect() to unix:/var/deploy/medictrust-staging/shared/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream
立即显示 500 个页面。
以上错误随机发生;有时是连接超时,有时是连接被拒绝..但最常见的是连接超时。
奇怪的是,如果我通过 cURL 访问我的应用程序,Puma 不会超时。在 Puma 或 Nginx 配置中没有进行任何更改,这是否可能是由应用程序代码引起的?
如何让这个问题永远消失?
对我来说,网络服务器超时是因为 运行 整个数据库都有很长的查询,这占用了可用的连接并使 Puma 等待新的可用连接。
作为急救措施,我重新启动了我的 MySQL 服务器,它立即运行。我很遗憾没有记录慢速查询;因为该查询一定是我的 Rails 应用程序中某些错误代码的结果。
此外,这个 SO 答案也有帮助:Getting “Lock wait timeout exceeded; try restarting transaction” even though I'm not using a transaction
我在远程服务器上有两个 Rails 应用程序(生产环境和暂存环境)。
我目前遇到一个奇怪的问题,Puma 有时 在我完成部署(通过 cap deploy)后给我超时。这种情况已经发生了一段时间,而且越来越频繁。每当发生这种情况时,我都需要重新启动 Puma 服务器(从 cap puma:stop
和 cap puma:start
),或者手动执行 kill -9 <pid of puma instance>
。但是,在这两种情况下,我都需要首先从 shared/tmp/sockets
目录中 rm puma.sock
。
另一方面,我的生产环境没有遇到这个问题。它们之间的区别只是提交次数,我的暂存环境提前了几个(~50)次提交。早些时候,当我将暂存合并到生产并部署时,同样的问题出现在生产中。所以我将我的产品回滚到以前的版本,重新启动 Puma,然后问题就消失了。
注意: cap puma:restart
不知何故无法解决这个问题;我必须杀死当前的 Puma 实例,然后启动一个新实例才能解决此问题。
我当前的设置是:
- Rails 4.1
- 彪马
- Nginx
- 卡皮斯特拉诺 3
在错误发生时,Rails 日志中没有任何记录,但 Nginx 记录了一些错误:
upstream timed out (110: Connection timed out) while reading response header from upstream
等待 60 秒后,显示第 500 页。recv() failed (104: Connection reset by peer) while reading response header from upstream
立即显示 500 页。connect() to unix:/var/deploy/medictrust-staging/shared/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream
立即显示 500 个页面。
以上错误随机发生;有时是连接超时,有时是连接被拒绝..但最常见的是连接超时。
奇怪的是,如果我通过 cURL 访问我的应用程序,Puma 不会超时。在 Puma 或 Nginx 配置中没有进行任何更改,这是否可能是由应用程序代码引起的?
如何让这个问题永远消失?
对我来说,网络服务器超时是因为 运行 整个数据库都有很长的查询,这占用了可用的连接并使 Puma 等待新的可用连接。
作为急救措施,我重新启动了我的 MySQL 服务器,它立即运行。我很遗憾没有记录慢速查询;因为该查询一定是我的 Rails 应用程序中某些错误代码的结果。
此外,这个 SO 答案也有帮助:Getting “Lock wait timeout exceeded; try restarting transaction” even though I'm not using a transaction