当连接空闲了一段时间后,我的java应用程序中的连接突然下降。
IO Error: Connection reset; nested exception is java.sql.SQLRecoverableException
发现如下:https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html
如何在Java中设置保活属性?
当连接空闲了一段时间后,我的java应用程序中的连接突然下降。
IO Error: Connection reset; nested exception is java.sql.SQLRecoverableException
发现如下:https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html
如何在Java中设置保活属性?
1条答案
按热度按时间0lvr5msh1#
这可能对您“有用”,但不幸的是Linux内核默认值并不实用。
发送第一个穿刺针之前的延迟- 2小时。注:CISCO阿萨的“connection timeout idle”的默认值仅为1小时!!!因此,在发送第一个keepalive探测之前,连接将被终止。不幸的是,您需要root用户才能更改此内核参数。Java目前还不支持每个TCP连接的ioctl命令来设置keepalive参数。
当您更改此内核参数时,您应该看到类似以下内容:
在Oracle端,默认情况下Oracle TCP Keepalive对于Oracle连接不活动。可以通过设置连接字符串中DESCRIPTION元素下的
(ENABLE=BROKEN)
或使用-Doracle.net.keepAlive=true
来启用它您可以使用tcpdump Connect验证您的设置:
当您在内核级别更改keepalive参数时,此tcpdump过滤器应显示按请求的时间间隔发送的探测。
PS:TCP keepalive发送仅由Linux内核处理。Oracle的客户端软件只能在打开连接时打开此选项。