Ruby on rails 在多服务器环境中,如果站点的不活动时间超过15 mn,则服务器将失去与PostgreSQL数据库的连接

Ruby on rails 在多服务器环境中,如果站点的不活动时间超过15 mn,则服务器将失去与PostgreSQL数据库的连接,ruby-on-rails,ruby-on-rails-3,postgresql,webserver,postgresql-9.1,Ruby On Rails,Ruby On Rails 3,Postgresql,Webserver,Postgresql 9.1,如果我的暂存(2台服务器)或生产(4台服务器)服务器在大约15分钟内没有活动,我会在airbrake中遇到以下错误。以下是错误消息: ActiveRecord::语句无效:PG::错误:无法从接收数据 服务器:连接超时 或 PG::错误:无法连接到服务器:连接超时是错误原因 在主机“tci-db4.dev.prod”上运行并接受TCP/IP的服务器 端口5432上的连接 我正在使用PostgreSQL作为我的数据库。其中一台服务器还充当数据库服务器 环境: Ruby 1.9.3(这在Ruby 1

如果我的暂存(2台服务器)或生产(4台服务器)服务器在大约15分钟内没有活动,我会在airbrake中遇到以下错误。以下是错误消息:

ActiveRecord::语句无效:PG::错误:无法从接收数据 服务器:连接超时

PG::错误:无法连接到服务器:连接超时是错误原因 在主机“tci-db4.dev.prod”上运行并接受TCP/IP的服务器 端口5432上的连接

我正在使用PostgreSQL作为我的数据库。其中一台服务器还充当数据库服务器

环境:

Ruby 1.9.3(这在Ruby 1.8.7下也发生过,但升级后情况更糟,因为服务器上的Ruby进程将变为100%,并保持在100%,直到服务器失去db连接时停止

Rails 3.1.6

PG GEM 0.13.2

Postgres 9.1

Phusion乘客


这个问题已经发生一年多了,所以我希望有人能对如何解决这个问题有所了解。谢谢。

检查应用程序服务器和数据库服务器之间的所有路由器/交换机上的TCP/IP套接字超时设置。同时打开数据库端的日志记录,观察连接的整个生命周期并进行比较应用程序中出现错误的时间。我建议打开postgresql.conf中的以下设置,直到您知道要查找什么:

log_connections = on
log_disconnections = on
log_statement = all
可以通过调用postgres进程(或作为数据库超级用户运行“SELECT pg_reload_conf()”)来激活它们

我会告诉你,你有一个“连接关闭远程主机”或类似的最后一条消息之前,实际断开记录


我以前见过这种情况,是中间交换机上的超时设置造成的。

检查应用程序服务器和数据库服务器之间的所有路由器/交换机上的TCP/IP套接字超时设置。同时打开数据库端的日志记录,观察连接的整个生命周期,并将时间与错误进行比较我建议在postgresql.conf中打开以下设置,直到您知道要查找什么:

log_connections = on
log_disconnections = on
log_statement = all
可以通过调用postgres进程(或作为数据库超级用户运行“SELECT pg_reload_conf()”)来激活它们

我会告诉你,你有一个“连接关闭远程主机”或类似的最后一条消息之前,实际断开记录


我以前见过这种情况,是中间交换机上的超时设置造成的。

您可能有NAT路由器、连接跟踪防火墙或uppity“第3层交换机”在客户端和服务器之间。这些设备在超时后从其表中刷新记住的连接。您需要。

您可能有NAT路由器、连接跟踪防火墙或uppity“第3层交换机”在客户端和服务器之间。这些设备在超时后从其表中刷新已记住的连接。您需要。

维护来自4个应用程序服务器的大量已保留连接可能非常困难(它可能表示连接数非常多。您可以检查pgpool和您的postgres服务器之间保持的连接数是否合理。当太多进程要求连接时,pgpool也会对连接进行排队。然后检查应用程序中如何管理连接。是否有连接池在应用服务器中老化?您仍然需要它吗?您是否需要长期连接,还是可以简单地使用短会话连接


如果PgPool和postgreSQl server之间仍有断开连接的会话,则必须检查TCP/IP问题。这些问题可能来自操作系统的TCP/IP设置,但也可以在postgreSQl配置中进行调整。检查是否有TCP\u保留设置。如果使用PgPool,请检查设置。

要从4个应用服务器上建立大量保持连接可能非常困难(它可能表示连接数非常多。您可以检查pgpool和您的postgres服务器之间保持的连接数是否合理。当太多进程要求连接时,pgpool也会对连接进行排队。然后检查应用程序中如何管理连接。是否有连接池在应用服务器中老化?您仍然需要它吗?您是否需要长期连接,还是可以简单地使用短会话连接


如果PgPool和postgreSQl server之间仍有断开连接的会话,则必须检查TCP/IP问题。这些问题可能来自操作系统的TCP/IP设置,但也可以在postgreSQl配置中进行调整。检查TCP\u keepalive设置。如果使用PgPool,请检查设置。

您与PostgreSQL的连接有什么不寻常的地方?是直接用SSL加密还是通过SSH或SSL隧道?不是,不是通过SSH或SSL。两者之间有防火墙吗?;)您与PostgreSQL的连接有什么不寻常的地方吗?是直接用SSL加密还是通过SSH或SSL隧道?不是,不是通过SSH或SSL。两者之间有防火墙吗?;)