暴走の小新 2024-09-24 20:07 采纳率: 0%
浏览 5

cce容器中使用数据源连接的超时配置问题

最近遇到一个问题,我们使用了cce云容器部署应用,数据库用的oracle19c版本,因为有主备库jdbc连接中使用TNS写法将主备库都写上了,具体配置如下,由于涉密就把关键信息脱敏了,测试发现如果jdbc-url中第一个数据库服务器关机或者随便写一个没法pin通的ip,第二个ip是能正常连接的数据库,那么启动时大概需要10分钟才能成功,容器日志中显示先加载基础配置,10分钟后开始加载应用配置,这段时间由于探针检测间隔时间是60s,会一直失败,如果达到失败上限就再自动重启了,然后无限循环下去,我把探针次数上限调大,才发现10分钟后竟然就正常启动了,就是不知道这个10分钟的时间配置是怎么来的,一开始以为是min-evictable-idle-time的配置,但是把这个改成120000之后再测还是需要10分钟,有没有朋友知道这个原理的,求解答。


<jdbc-connection-pool link-name="jdbc/test" name="test" bundle-app="true" factory="com. tongweb.web. jdbc.pool. DataSourceFactory" driver-class="oracle. jdoc.driver.OracleDriver" driver-jar="ojdoc8-19.10.0.0.jar"
jdbc-url="jdoc: oracle: thin: @ (DESCRIPTION= (ADDRESS_LIST= (ADDRESS= (PROTOCOL=TCP) (HOST=10.1.1.0) (PORT=0001) ) (ADDRESS= (PROTOCOL-TCP) (HOST=10.1.1.1) (PORT=0001)) ) (CONNECT_DATA=(SERVICE_ NAME=srv)))"user-name="testname" jummqilx="1111111111111111"
initial-size="10" max-active="20" min-idle="4" max-wait="15000" validation-query="SELECT 1 FROM DUAL" validation-query-timeout="1" test-on-borrow="true" test-on-connect="false" test-on-return="false" test-while-idle="true" validation-interval="1000"
time-between-eviction-runs="60000" min-evictable-idle-time=" 600000" max-age="900000"
remove-abandoned="false"
remove-abandoned-timeout="300" sql-log="false" log-on-excute-time="20"
jdoc-interceptors="com.tongweb.web.jdbc.pool.interceptor.ConnectionState; com.tongweb.web.jdbc.pool.interceptor.StatementFinalizer"/>

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-24 20:08
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据您提供的信息和配置,关于连接Oracle数据库时出现的延迟问题,特别是当在JDBC URL中配置了多个数据库地址时,这种情况通常涉及到以下几个因素:

    1. 网络延迟与DNS解析:如果JDBC URL中的主机名(HOST)涉及到DNS解析,特别是在云环境中,可能存在DNS解析的延迟。此外,如果第一个数据库服务器不可达,客户端可能需要尝试解析或连接到第二个服务器,这会增加连接时间。

    2. 连接池配置min-idle参数设置了池中预先创建并检查的空闲连接数。在您的配置中设置为4,这意味着在启动时至少需要创建和验证这些连接。如果第一个数据库连接失败,它可能需要较长时间才能创建和验证其他连接。

    3. 验证策略与超时设置:配置中的validation-query-timeout参数是验证查询的超时时间。如果在指定的时间内无法完成验证查询,连接将被视为无效。如果您有一个非常短的验证超时时间,并且在网络延迟较高的情况下尝试连接到第二个数据库服务器进行验证,那么这个过程可能会因为等待响应时间而变长。尝试调整这个参数值可能会减少启动时的延迟。

    至于你提到的延迟10分钟的情况,很难通过单一配置项来解释这一现象。看起来这个过程可能涉及多个层面的操作和超时设置,包括DNS解析、网络延迟、连接池内部处理逻辑等。这可能还涉及到其他配置和应用程序内部的逻辑处理。可以尝试以下几个步骤来诊断和解决问题:

    • 检查Oracle客户端版本是否与数据库版本兼容,确保驱动程序能够正常工作。
    • 验证网络配置,包括DNS解析时间、防火墙设置以及Oracle服务监听状态等。尝试简化JDBC URL只使用一个数据库地址来排除可能的连接故障点。
    • 分析容器启动过程中的日志记录信息。有时候异常堆栈或警告信息能够提供更多线索。检查是否有任何相关的错误或警告信息。
    • 考虑使用更详细的监控工具来跟踪容器内部操作和处理流程。这些工具可能能够提供更多关于启动延迟的原因的详细信息。

    至于具体的代码和配置调整建议,请根据实际的应用需求和部署环境来调整上述配置参数的值。通常调整此类问题需要进行一些实验和测试来确定最佳配置组合。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月24日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?