应用层面上数据库连接池的一些优化措施

数据库连接池提升了编码效率的同时,还提升了应用程序的性能。但使用不当可能会造成资源的浪费、线程阻塞、内存泄漏等问题,严重的可直接导致应用宕机。在应用的连接池配置上可有如下优化点。

1、超时配置

在 络情况良好的情况下,适当降低相应的超时配置,这样能够避免数据库异常时从而导致大量的工作现场阻塞。

比如druid连接池的maxWait参数,默认是-1,既不超时,可调整在2秒以下。hikari连接池的connectionTimeout参数,默认是30000毫秒,也可以调整到2秒以下,但最低不能低于250ms,该连接池还有一个不常用的参数validationTimeout,该validationTimeout参数必须要小于connectionTimeout,它的默认值是5000ms,可调整到1000ms以下,最低也只能为250ms。

2、连接池的大小

使用连接池时,若配置了超量的连接会导致资源的浪费,设置小了会导致连接池的优点发挥不了作用,合理设置大小格外重要。

最小空闲连接数建议设置为:CPU 核数 * 2 + 挂载的磁盘数量,如8C8G的主机可设置为 8 * 2 + 2 = 18.

最大实际连接数建议设置为:最大实际连接数 <= 最小空闲连接数 * 5,不超过最小空闲连接数的5倍。

比如druid的minIdle和maxIdle参数,maxIdle参数默认为8;hikari的minimumIdle和maximumPoolSize参数,这两个参数默认参数都为10。

3、连接池隔离

在线程池的使用过程中,如果线程中有IO密集型和任务密集型的线程混在一起的时候,会对这两种线程进行拆分,放到不同的线程池中执行。在数据库连接池中也建议做同样的隔离处理,比如应用中同时要处理接口请求的和定时任务,最好使用两个相互独立的连接池,避免定时任务长时间持有数据库连接,导致接口处理线程没法及时获取数据库连接。当然这种情况下最好将定时任务独立出来形成一个组件。

4、连接可用性检验

需要定期的检查连接池中的连接是否健康,从而避免应用获取到不可用的数据库连接导致应用异常。

比如druid连接池就自带这连接池的监控,可以很好的利用起来。像hikari连接次可以通过配置maxLifetime参数,通过定时替换连接池的连接,保持连接的健康状态,默认参数是30分钟,建议设置为比数据库层面连接时间短几秒,不建议设置为0,因为0表示寿命无限大;连接池也是内存泄漏容易出现的地方,hikari连接池可以通过设置leakDetectionThreshold来定时检测是否有线程长时间占有连接没有释放导致内存泄漏,该功能默认是关闭的,建议配置开启,设置为5秒到2秒,最低只能到2秒。

 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月1日
下一篇 2021年1月1日

相关推荐