ruby-on-rails – Rails Reaper无法正常工作
根据API文档,rails reaper用于查找和恢复死线程的连接.收割机基于reaping_频率运行.
我遇到的情况是,当数据库连接数超过指定的限制并且有连接处于空闲状态但收割机没有重置这些连接.我尝试手动运行收割机,但它似乎没有任何影响. reaper = ActiveRecord::ConnectionAdapters::ConnectionPool::Reaper.new(ActiveRecord::Base.connection,10) reaper.run 使用它验证它没有任何影响 ActiveRecord::Base.connection.execute("SELECT * FROM pg_stat_activity WHERE pid <> pg_backend_pid()") PgHero.total_connections 这是ActiveRecord中收割机的错误还是不适合这样工作?如果是这样的话,如何选择编写自定义收割机来恢复死连接? pg gem用于连接postgres db.占用连接的查询是:
Rails版本:4.2.3 pg宝石版:0.17.1 Postgres版本:9.4.6 Rails应用服务器:Puma 解决方法
先说几点:
>可能不是SHOW TRANSACTION ISOLATION LEVEL查询正在“吞噬”您的数据库连接. pg_stat_activity视图只显示活动或在您的情况下,在每个连接上执行的last query.因此,统计数据中更重要的信息就是打开了太多的连接. 现在,超出最大值可能有很多原因.允许数据库服务器上的连接: >您可能有太多线程同时检查了与db的连接. ConnectionPool通常为每个线程保留一个与db的连接,最多为database.yml中配置的池大小.因此,如果您的池大小相当大并且您有许多线程,则可以超过最大值.数据库连接.例如,puma创建到16 threads by default. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |