开发者社区> 问答> 正文

创建物理连接过慢,线程都在阻塞,为何cpu使用率过高,同时阻塞时间远超设置的时间

com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1556, active 53, maxActive 100, creating 0 有那么一分钟,经常报这个错,应该是创建物理连接过慢,但是我不理解的是,为何cpu使用率会高,当时高峰92%,load也很高,不都是阻塞在线程上等待连接么,另外为何等待的时间 远超我设置的从连接池获取的连接的超时时间,我设置的是500ms,而线程等待了1556 才超时?

原提问者GitHub用户asasas234

展开
收起
山海行 2023-07-05 19:47:51 75 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    可能会导致CPU使用率过高的原因有很多种。以下是一些可能的原因:

    数据库性能问题:如果您的数据库性能较差,可能会导致创建物理连接的时间过长,从而导致线程阻塞和CPU使用率过高。您可以尝试对数据库进行性能优化,例如优化查询语句、增加索引、调整数据库参数等。

    网络问题:如果您的数据库与应用程序之间的网络连接出现问题,可能会导致创建物理连接的时间过长。您可以尝试检查网络连接是否正常,并优化网络连接性能,例如增加带宽、使用更快的网络设备等。

    线程池问题:如果您的应用程序使用线程池来管理线程,可能会导致线程池中的线程被耗尽,从而导致线程阻塞和CPU使用率过高。您可以尝试增加线程池的大小或者调整线程池的参数,例如线程池的最大线程数、空闲线程的存活时间等。

    内存问题:如果您的应用程序占用了较多的内存资源,可能会导致垃圾回收时间过长,从而导致线程阻塞和CPU使用率过高。您可以尝试优化应用程序的内存使用,例如减少内存泄漏、增加内存容量等。

    其他问题:还有一些其他的因素可能会导致创建物理连接过慢、线程阻塞和CPU使用率过高,例如操作系统的资源限制、磁盘IO性能问题等。您可以尝试对这些因素进行排查和优化。

    2023-07-30 15:48:46
    赞同 展开评论 打赏
  • 创建物理连接过慢:数据库连接池在获取连接时,可能需要创建新的物理连接,这个过程可能受到数据库服务器的影响。如果数据库服务器响应较慢,创建物理连接的时间会延长。

    CPU 使用率高:当连接池中的连接数达到上限时,新的请求需要等待可用连接。在等待过程中,连接池可能会不断尝试创建物理连接,这可能会导致 CPU 使用率升高。

    2023-07-11 09:48:52
    赞同 展开评论 打赏
  • 是因为当时有慢SQL,同时请求量较大,所以连接都被慢SQL占用了,得不到释放,然后大部分线程都在wait 等待链接,等待的线程多了,Load和CPU也就上去了,这就会导致CPU调度不过来,所以wait到时间了,CPU由于忙不过来,所以等待时间就会超过设定的时间

    原回答者GitHub用户asasas234

    2023-07-06 11:06:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
RDS SQL Server CPU高使用率性能优化 立即下载
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载