相关问题这个问题基本上,我们有一个 Java 应用程序,当启动并且用户登录时,它会创建与 Oracle DB 的长期连接,该连接在应用程序(或在本例中为 kubernetes POD)的整个生命周期内保持活动状态。问题是,一段时间后,可能是 30 分钟,甚至可能是 2 天,日志中会出现错误
[pool-16-thread-1] WARN c.zaxxer.hikari.pool.ProxyConnection - HikariPool-2 - Connection oracle.jdbc.driver.T4CConnection@51f5db67 marked as broken because of SQLSTATE(08006), ErrorCode(17002)
java.sql.SQLRecoverableException: IO Error: Connection reset by peer
这会导致随后出现大量 SQL 错误,因为所述活动连接仍尝试使用断开的连接。事实证明,似乎创建了 Hibernate 会话但从未清理过,因为我相信它在与 DB 交互时应该始终创建一个新会话。我已经向我们的开发人员指出了这一点,但不知道什么时候会修复。
我们目前正在尝试将应用程序迁移到 kubernetes,对我来说,主要问题是为什么这个连接重置会发生在 kubernetes 上?例如,这不会发生在普通虚拟机上,尽管 Java 应用程序是相同的。该应用程序扩展到 2 个 POD,问题有时只发生在一个 POD 上,有时在 5-10 分钟后也会发生在第二个 POD 上,因此这排除了网络故障,因为它应该同时发生在两个 POD 上,不是吗?我不知道还能在哪里寻找,因为 kubernetes 和节点的所有日志都没有说明任何内容。也许有人知道在哪里或如何正确调试它?从 oracle DB 方面,他们说也只有连接丢失错误或其他错误,仅此而已。