gpt4 book ai didi

java - Tomcat 连接池配置 : attributes settings. 示例和建议

转载 作者:行者123 更新时间:2023-11-28 22:13:08 24 4
gpt4 key购买 nike

在我的网络应用程序的 context.xml 文件中,我使用:

<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
removeAbandoned="true" removeAbandonedTimeout="60"
maxActive="30" maxIdle="30" maxWait="10000"
username="myuser" password="mypwd" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" closeMethod="close"
validationQuery="select 1" testOnBorrow="true" />

它有效,但我不确定 30 个同时连接是否足够(网络应用程序就像一场拍卖,还有管理员访问权可以计算在内)。

另外我也不知道

 removeAbandonedTimeout="60"

太多了,应该如何计算。

是否有关于连接池场景、关于如何平衡资源属性的帖子/文章?

最佳答案

如何配置数据库连接池取决于使用它的应用程序的特性。我可以提供一些提示,但最终您必须通过(负载)测试自己找出答案。

首先,阅读 documentation小心。例如,removeAbandoned 选项是不关闭/返回连接到池的错误代码的回退(来自文档:将此设置为 true 可以从无法关闭的应用程序恢复数据库连接一个连接)。如果使用了 removeAbandoned,则在测试应用程序时也应该使用 logAbandoned(设置为 true)。 removeAbandonedTimeout 应调整为您运行时间最长的查询(来自文档:该值应设置为您的应用程序可能具有的运行时间最长的查询。)。

询问您的 DBA 是否更喜欢新连接而不是空闲连接,并相应地调整 minEvictableIdleTimeMillis(一些 DBA 宁愿拥有较少的新连接(例如 1 小时的空闲超时),而其他人更喜欢关闭空闲连接,因为尽快(例如 30 秒的空闲超时)。

10 秒的 maxWait 对于生产来说可能太短了。我将其保持在 50 秒(与数据库用于报告死锁的超时相同),以便网络和数据库故障(将会发生)不会导致应用程序错误。另一方面,在(负载)测试时,将此值设置得较低(如 3 秒)以指示池何时太小(即 maxActive 太低)。

如果应用程序管理员需要有保证的访问权限,您需要另一个(第二个)池来为这些特殊用户提供服务。否则,无法保证他们可以“进入”,并且当出现问题并且常规池完全耗尽时,他们很可能必须进入。

我之前提到过负载测试,一些额外的提示:

  • 确保测试数据库代表生产数据库。在生产数据库上运行很长时间的查询必须在测试数据库上运行很长时间。
  • 调整池参数以进行测试(以便您快速注意到奇怪的行为)和生产(使其尽可能稳定并确保您会注意到真正糟糕的事情)。
  • 使用较低的 maxActive 值重复负载测试批处理,直到您开始注意到吞吐量(或批处理运行时间)的真正差异。例如,我最近测试了一个有 24 个线程的应用程序,所有线程都在执行数据库操作,并以最大池大小 16 开始。然后以最大池大小 8 运行,几乎看不出有什么区别。然后以最大池大小 4 运行并注意到差异。因此最大池大小为 8 就足够了。

提高效率的一些技巧:

  • 确保在租用和释放连接之间的所有代码仅执行数据库操作(例如,不记录日志,因为它刷新到磁盘上的文件而浪费时间)。
  • 确保在 finally block 中释放/关闭连接,以便连接不会从池中泄漏。
  • 在从池中租用连接之前准备好查询中使用的所有数据。

愉快的负载测试......

关于java - Tomcat 连接池配置 : attributes settings. 示例和建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22245477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com