【发布时间】:2021-02-12 03:02:49
【问题描述】:
我有 2 台服务器(A,B)。 我在 A 中运行 rails app,在 B 中运行 db。 在服务器 B 中,我正在运行 pgbouncer 和 postgresql。
当我在 A 中运行 200 个线程时,即使我将 pgbouncer 最大客户端连接增加到 500,我也会遇到这个问题。并且 pgbouncer pool_mode 是会话。 Postgresql 池为 100。
我还在服务器 A 中将 db pool 增加到 500。
我怎样才能避免这个问题并运行 200 个线程而没有任何问题?
后来,我更新了代码。删除 pgbouncer 并直接使用 postgresql。 创建了 2 个执行 db 操作的新线程,其他线程不再执行 db 操作。 在线程运行时,我正在监视活动连接。它保持 3 处于活动状态。 但是在线程结束时,我遇到了这个问题。 我使用 ActiveRecord::Base.connection_pool.stat 显示连接池状态
{:size=>500, :connections=>4, :busy=>3, :dead=>0, :idle=>1, :waiting=>0, :checkout_timeout=>5}
rake aborted!
ActiveRecord::StatementInvalid: PG::UnableToSend: no connection to the server
有人可以帮我解决这个问题吗?
【问题讨论】:
-
PG 日志中的任何内容?
-
2020-10-30 07:57:45.808 UTC [15779] LOG C-0x55f2c78d3520:saveatrain_production/saveatrain@13.94.118.240:35910 关闭,因为:客户端关闭请求(年龄=113s)2020-10 -30 07:57:48.636 UTC [15779] 日志统计:690 xacts/s,705 个查询/s,94591 B/s,出 232456 B/s,xact 913 us,查询 870 us,等待 0 us 2020-10 -30 07:57:50.990 UTC [15779] LOG C-0x55f2c78d1ae0: saveatrain_production/saveatrain@13.94.118.240:59996 关闭,因为:客户端关闭请求 (age=782s)
标签: ruby-on-rails postgresql pgbouncer