Firebird Server 3 中的连接超时

问题描述 投票:0回答:1

我正在使用 Firebird .NET Client 9.1.1 通过 C# 应用程序连接到 Firebird SQL Server 版本 3。应用程序启动后,将使用连接池建立 3 个与服务器的连接。当应用程序以正常方式退出时,所有连接都会关闭。当应用程序被终止时,例如使用任务管理器或由于远程桌面中的会话超时,只有两个连接被关闭,一个连接仍然存在。从那时起,这些“断开的连接”就闲置了。我需要设置什么才能杀死这些连接,例如。 G。 24小时后?我发现 Firebird SQL Server 4.0 的空闲超时设置 (https://firebirdsql.org/file/documentation/chunk/en/refdocs/fblangref40/fblangref40-management-timeouts.html),但不适用于 Firebird SQL Server 3.0 .

我正在更新问题,因为我尝试了几件事,尤其是 Marc Rottevel 提到的:

  • 服务器
    ISQL Version: LI-V3.0.5.33100 Firebird 3.0
    在Debian 10上运行。如果不需要解决问题,我想推迟更新firebird
  • 我检查了客户端的PID,没有这些ID的进程
  • 在写这篇文章时我想到的另一个想法是:我们使用
    RemoteAuxPort = 6032
    在客户端接收服务器发送的事件。问题可能与此设置有关吗?
  • 我添加了
#
# Seconds to wait on a silent client connection before the server sends
# dummy packets to request acknowledgment.
#
...
# Per-connection configurable.
#
# Type: integer
#
DummyPacketInterval = 1800

在 firebird.conf 中并重新启动服务器。然而,仍然有四个星期前建立的连接(上次服务器重新启动),但 PID(例如 11280)不再出现在客户端上:

firebird firebird-3.0 firebird-.net-provider
1个回答
0
投票

首先,确保您正在查询监控表的最新快照。一旦在事务中查询了任何监控表,则对任何监控表的所有其他查询都将具有稳定的快照。您需要启动一个新的事务来获取新的监控快照。

其次,您没有指定您使用的是哪个 Firebird 3.0 版本:请确保您使用的是最新版本(此时为 3.0.10)。

最终应检测到这些连接的终止,然后将其清除。通常,Firebird 依赖

SO_KEEPALIVE
套接字选项来检测断开的连接。使用 Windows 上的默认 TCP/IP 设置,它应该在 2 小时内检测到断开的连接。

如果这种情况没有发生(或者不够快,不适合您的口味),您可以检查 Windows TCP/IP 设置,以检查 TCP keepalive 设置是否已被修改或禁用(最新的 Windows 版本不再允许禁用此功能) ,在注册表项

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
中(特别是
KeepAliveTime
KeepAliveInterval
,如果这些键不存在,则应用默认值,在旧版 Windows 上,当
TcpMaxDataRetransmissions
设置为 0 时,将禁用 keepalive)。

或者,您可以将

DummyPacketInterval
中的
firebird.conf
设置为非零值。

DummyPacketInterval
是一个以为单位的值,如果连接空闲了至少该时间长度,服务器将发送一个“虚拟”数据包。如果连接断开,尝试发送该虚拟数据包将导致错误,这将使 Firebird 识别出连接不再存在。

不要将值设置得太低,这只会导致不必要的负载和网络流量。我建议使用 30 分钟(1800 秒)甚至更高的间隔。

© www.soinside.com 2019 - 2024. All rights reserved.