一切都是浮云丶 2020-06-18 00:01 采纳率: 0%
浏览 100

关于线程池引发的问题

    程序运行一段时间后就会不响应

    使用的是springboot2.0项目+postgresql 10,配置文件中没有做任何关于数据库连接池的配置。

    错误日志:Caused by: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.

    跟Sql语句无关,所有关于数据库的请求都报这个异常。

    尝试的解决方案:

    1 查看数据库剩余连接:select max_conn-now_conn as resi_conn from (select setting::int8 as max_conn,(select count(*) from pg_stat_activity) as now_conn from pg_settings where name = 'max_connections') t;  剩余连接为410。
    2 查看所有连接的状态:select datname,pid,application_name,state from pg_stat_activity;发现有好几个idle状态的数据库连接;然后还有9个idle in transactional的数据库连接,而且发现这9个数据库连接一直都是idle in transactional状态,项目创建的数据库连接总共也就14个。
    3 使用arthas发现有9个Bokcked线程,查看这些线程的堆栈信息,发现这些线程都是在开启事务的情况下被阻塞了。

    猜测原因:长时间持有idle in transactional状态的数据库连接,会不会影响获取数据库连接。

    问题重现:

图片说明

    只需要调用10次接口,后面的请求就获取不要数据库连接了。


    但我很好奇长时间idle in transactioanl状态的数据库连接,为啥会导致获取不到数据库连接!

    ===================================================

    好吧,最后找到原因了,还是是因为 HikariPool创建的连接被用完了,它默认最多会创建10个连接。
    主要是被我第二个操作给误导了,查看数据库连接的状态,是有好几个idle状态的连接,但这是其他服务创建的...
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-06-18 10:17
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料