Java Docker&;中的专用OJDBC连接;库伯内特斯

Java Docker&;中的专用OJDBC连接;库伯内特斯,java,multithreading,kubernetes,ojdbc,Java,Multithreading,Kubernetes,Ojdbc,我正在运行简单的本机Java8代码来生成大量线程。这些线程通过自己的专用OJDBC连接连接到数据库。由于数据库中不断填充记录,所以线程使用这个专用连接来执行数据库中的各种任务。每个线程在一段时间后轮询数据库以获取记录,然后对其进行处理,然后重新轮询数据库。在线程的生命周期内,连接保持不变。 如果我在简单的虚拟机上运行它,整个设置工作正常。这里没有连接闭包,但当我把这个java代码移到Kubernetes时,问题就开始出现了。 几次之后,每个线程开始抛出以下异常 java.sql.SQLRecov

我正在运行简单的本机Java8代码来生成大量线程。这些线程通过自己的专用OJDBC连接连接到数据库。由于数据库中不断填充记录,所以线程使用这个专用连接来执行数据库中的各种任务。每个线程在一段时间后轮询数据库以获取记录,然后对其进行处理,然后重新轮询数据库。在线程的生命周期内,连接保持不变。 如果我在简单的虚拟机上运行它,整个设置工作正常。这里没有连接闭包,但当我把这个java代码移到Kubernetes时,问题就开始出现了。 几次之后,每个线程开始抛出以下异常

java.sql.SQLRecoverableException: Closed Connection
        at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3694)
不会重新启动JDBC连接,因为线程假定连接是专用的,并且我们的后端系统不会关闭连接。
这种连接关闭只在Kubernetes中发生,而且是随机发生的,所以我很好奇,我需要做什么特定的网络设置才能使专用连接在Kubernetes中工作?

从评论中回复,您可能想打开TCP keepalives,但如果不可能,请查看已建立的
net.netfilter.nf\u conntrack\u TCP\u timeout\u
sysctl和类似的conntrack设置。您还可以使用无头模式服务绕过代理网格,尽管这可能会影响您的故障切换过程,因此请务必仔细检查。

您是否发送TCP保留(或协议级保留)?如果您通过kube代理网格进行连接,则可能由于不活动而导致iptables超时。不,没有线程发送的keep-alive,因此我假设iptables触发超时是正确的。如何为POD中的所有传出连接设置无限超时?感谢您的支持,我检查了stetings,当前将其设置为
net.netfilter.nf\u conntrack\u tcp\u timeout\u builded=86400
,因此,当此问题发生时,24小时内还有一件事,我在conntrack列表中看到大量处于等待状态的连接建议缩短时间?