- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据 API 文档,rails reaper 旨在从死线程中查找和恢复连接。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 中 reaper 的错误还是它不应该像这样工作?如果是这种情况,如何选择编写自定义收割器来恢复死连接? pg gem 用于连接到 postgres 数据库。消耗连接的查询是:
SHOW TRANSACTION ISOLATION LEVEL
rails 版本:4.2.3
pg gem 版本:0.17.1
Postgres 版本:9.4.6
Rails 应用服务器:Puma
最佳答案
首先注意几点:
可能不是 SHOW TRANSACTION ISOLATION LEVEL
查询正在“耗尽”您的数据库连接。 pg_stat_activity
View 仅显示事件,或者在您的情况下,last query 在每个连接上执行。因此,统计信息中更重要的信息就是打开的连接太多。
ConnectionPool::Reaper
释放数据库连接,但 仅来自 dead threads ,即那些停止或意外终止的。但它不影响事件连接或休眠线程。在我看来,Reaper 对您不起作用这一事实仅意味着这些线程可能正在休眠,而不是死亡。
现在,超过最大值的原因有很多。数据库服务器上允许的连接:
您可能太多线程同时检查到数据库的连接。 ConnectionPool
通常为每个线程保留一个到数据库的连接,最大为 database.yml
中配置的 pool
大小。所以如果你的池大小相当大并且你有很多线程,你可以超过最大值。数据库连接。例如,puma 最多创建 16 threads by default .
每个 rails 进程都定义了自己的连接池。因此,例如,如果您的池大小定义为 10,并且您有 10 个 rails 进程,则与 db 的连接可以增加到 10 * 10 = 100
连接。 Puma 服务器允许运行 multiple workers (它们是单独的进程),因此您可能有太多 puma worker 正在运行。
同样的逻辑适用于所有后台进程和线程。例如,Sidekiq 默认为后台作业创建最多 25 个线程。因此,如果您在代码中使用线程或在内部使用线程的任何 gem,例如对于后台作业功能,您必须了解它们的精确设置,以免超过最大连接数。
您可能会遇到数据库连接泄漏。当使用 preload_app
(应用程序预加载)时,Puma 服务器需要进行特殊设置,以免数据库连接泄漏。这是记录在案的,例如here和 here .
关于ruby-on-rails - Rails Reaper 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36619094/
所以我安装了 cassandra-reaper,并且我设置了每周三的时间表来修复我的项目数据库。我只是想知道是否还需要为已创建的 cassandra-reapers 数据库安排修复? 最佳答案 我认为
根据 API 文档,rails reaper 旨在从死线程中查找和恢复连接。reaper 是根据 reaping_ 频率运行的。 我遇到过这样的情况:数据库连接数超过指定限制,并且有连接处于空闲状态,
当通过 Capistrano 部署我的 Rails 应用程序时,它尝试执行的最后一件事是: sudo -p 'sudo password: ' -u app /home/user/public_htm
我在 Reaper 中尝试过 tkinter hello_world 代码High Sierra 中的 5.9 64 位 Mac。 ```从 tkinter 导入 * 根 = Tk()root.tit
我的 RMI Reaper 线程有问题,它不允许我的所有程序终止,因为该线程不是守护进程。我发现信息表明该线程仅在所有对象均未导出时停止。所以我有以下代码来创建 rmi serer。 registry
一些背景: REAPER是一个数字音频工作站,具有 extensive scripting API与 Lua、Python、C/C++ 和 EEL 绑定(bind)。我还没有找到太多关于它如何在内部处
我已经使用最新的 docker 镜像在 kubernetes 集群中将 Cassandra reaper 部署为一个有状态集,以维护 Cassandra 集群。我使用 Cassandra 作为后端存储
我有一个 Web 应用程序(使用 Spring 3.1),它使用 @Scheduled Annotation 定期执行工作任务(计划延迟)。工作任务打开与 AWS DynamoDb 的连接并执行一些数
我已经在 Apache Tomcat 7.0.41 中部署了一个 Struts 1.3 Web 应用程序。 tomcat 服务器似乎经常挂起并且无法处理任何请求,在浏览器上显示页面未找到错误,类似于停
我是一名优秀的程序员,十分优秀!