【问题标题】:Ruby on Rails application with frozen connection on PostgreSQL on RDS AWSRuby on Rails 应用程序在 RDS AWS 上的 PostgreSQL 上冻结连接
【发布时间】:2019-01-08 16:13:55
【问题描述】:

我最近在我的 Ruby on Rails 应用程序上将我的数据库从 Azure MSSQL 迁移到 AWS 上的 PostgreSQL。

部署应用程序后正常运行,但过了一小段时间后,应用程序无法再访问。这不是关于应用程序或 Puma 日志的信息。简直冻死了。

当我尝试从网络浏览器访问应用程序时,它会继续加载页面,但没有任何日志记录。

我可以修复它移除套接字并重新启动 Puma,但我很确定这不是正确的解决方案。

我还更改了config/database.yml 上的适配器和配置。

# PostgreSQL - RDS AWS
staging:
  adapter: postgresql
  host: my-instance.us-east-1.rds.amazonaws.com 
  database: my-db
  username: my-user
  password: my-password
  port: 5432
  pool: 5
  timeout: 5000
  connect_timeout: 5
  read_timeout: 5

# MSSQL - Azure
#staging:
#  adapter: sqlserver
#  host: my-instance.database.secure.windows.net
#  database: my-db
#  username: my-user@my-db
#  password: my-password
#  port: 1433
#  azure: true
#  tds_version: 8.0
#  mode: dblib

我正在使用 Puma v3.9.1 和这个配置:

threads 2, 4 
workers 0

on_worker_boot do
  ActiveSupport.on_load(:active_record) do
    ActiveRecord::Base.establish_connection
  end 
end

有什么想法吗?谢谢!

【问题讨论】:

    标签: postgresql amazon-web-services ruby-on-rails-4 rds


    【解决方案1】:

    当你有一个神秘的问题时:

    尝试通过更改容易更改的内容来理解它,同时尽可能多地说明与之相关和不相关的内容。可以把它想象成 20 个问题,让您系统地越来越接近。

    例如: 您在更改多项内容后注意到了问题,Azure->AWS、MSSQL->PostgreSQL、旧设置 -> 新设置等。这些更改中的任何一个都可能与问题相关或无关,您想确定哪个是什么.

    首先确保真的,真的,真的确保你正在测试你认为你正在测试的网络服务器和数据库。更改配置文件中的内容,并确保在应该出错时得到错误。

    您说它一开始可以工作,一段时间后停止工作,这听起来可能是资源不足,例如内存、存储或打开的文件。当它锁定后尝试运行(在运行 Puma 的机器上),“dmesg”并查找任何类型的错误和警告,“df -h”查看磁盘使用情况,“top”查看内存和 cpu 使用情况。尝试将实例暂时升级到“大”或任何比现在更多的实例。

    如果您怀疑它与切换到 Postgres 有关(而且工作量不大),您可以尝试将数据库配置恢复为指向 Azure 中的 MSSQL 数据库,同时仍在 AWS 上运行 Puma。您可以尝试暂时切换到 SQLite 以查看问题是否仍然存在。您可以尝试在 Azure 上运行旧设置,然后将数据库更改为 Postgres。

    您说日志中没有打印任何内容,我希望大多数数据库问题至少在请求超时后会显示在日志中。尝试从 Puma 更改为 Unicorn(应该快速简单),看看问题是否发生了变化,或者您是否至少在日志中得到了一些东西。

    这些步骤至少应该让您更接近发现问题。

    【讨论】:

    • 我在 nginx.error.log 上找到了这个日志:2019/01/20 13:17:01 [error] 861#861: *19 connect() to unix:///var/www /my-app/shared/tmp/sockets/my-app-puma.sock 在连接到上游时失败(111:连接被拒绝),客户端:177.22.227.255,服务器:localhost,请求:“GET /home HTTP/1.1” ,上游:“unix:///var/www/my-app/shared/tmp/sockets/my-app-puma.sock:/…”,主机:“my-ec2.compute-1.amazonaws.com”,推荐人:“my-ec2.compute-1.amazonaws.com
    • 我正要链接到这个:github.com/puma/puma/issues/1628 然后我在那里看到了你的评论!我看到其他一些具有类似设置的人谈到它可能是打开文件限制太低(你检查过吗?)或一些损坏的 nginx 扩展。我强烈建议您尝试使用没有 nginx 的 unicorn 来查看问题是否仍然存在。日志中的错误并没有告诉我太多,而 nginx 似乎无法与 puma 对话。您可以尝试重新配置 hem 以通过 tcp 套接字进行通信。
    • silent puma crash with nginx stackoverflow.com/questions/38848200/…
    • 我改成Passenger,知道运行正常。谢谢你的回答。
    • 很高兴听到!请不要忘记将其标记为正确。 :)
    猜你喜欢
    • 2014-02-12
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多