Alibaba Druid 数据库连接池 takeLast() AQS 死锁导致程序无响应

Alibaba Druid 数据库连接池 takeLast() AQS 死锁导致程序无响应

💡 原文中文,约1200字,阅读约需3分钟。
📝

内容提要

文章讨论了使用 Alibaba Druid 数据源时应用程序无响应的问题,主要由于线程在等待 `com.alibaba.druid.pool.DruidDataSource.takeLast()` 方法导致死锁。通过配置 `maxWait` 参数可以解决此问题,避免程序无限等待连接。默认情况下,`maxWait` 为 -1,表示无限等待。更新版本中对此进行了修正。

🎯

关键要点

  • 应用程序无响应的问题主要是由于线程在等待 com.alibaba.druid.pool.DruidDataSource.takeLast() 方法导致死锁。

  • 通过配置 maxWait 参数可以解决此问题,避免程序无限等待连接。

  • 默认情况下,maxWait 的值为 -1,表示无限等待。

  • 在配置文件中增加对 maxWait 的配置后,程序无响应的情况得以解决。

  • 最新版本中对该问题进行了修正,代码已更新。

延伸问答

为什么我的应用程序会无响应?

应用程序无响应主要是因为线程在等待 `com.alibaba.druid.pool.DruidDataSource.takeLast()` 方法导致死锁。

如何解决 Druid 数据库连接池的死锁问题?

通过在配置文件中设置 `maxWait` 参数,可以避免程序无限等待连接,从而解决死锁问题。

maxWait 参数的默认值是什么?

默认情况下,`maxWait` 的值为 -1,表示无限等待。

如何配置 maxWait 参数以避免程序无响应?

在配置文件中增加对 `maxWait` 的配置,设置一个正值即可避免程序无响应。

Druid 数据库连接池的最新版本是否修复了死锁问题?

是的,最新版本中对死锁问题进行了修正,代码已更新。

死锁发生时线程的状态是什么?

死锁发生时,大部分线程的状态为 WAITING,表示它们在等待连接。

➡️

继续阅读