com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1556, active 53, maxActive 100, creating 0 有那么一分钟,经常报这个错,应该是创建物理连接过慢,但是我不理解的是,为何cpu使用率会高,当时高峰92%,load也很高,不都是阻塞在线程上等待连接么,另外为何等待的时间 远超我设置的从连接池获取的连接的超时时间,我设置的是500ms,而线程等待了1556 才超时?
原提问者GitHub用户asasas234
可能会导致CPU使用率过高的原因有很多种。以下是一些可能的原因:
数据库性能问题:如果您的数据库性能较差,可能会导致创建物理连接的时间过长,从而导致线程阻塞和CPU使用率过高。您可以尝试对数据库进行性能优化,例如优化查询语句、增加索引、调整数据库参数等。
网络问题:如果您的数据库与应用程序之间的网络连接出现问题,可能会导致创建物理连接的时间过长。您可以尝试检查网络连接是否正常,并优化网络连接性能,例如增加带宽、使用更快的网络设备等。
线程池问题:如果您的应用程序使用线程池来管理线程,可能会导致线程池中的线程被耗尽,从而导致线程阻塞和CPU使用率过高。您可以尝试增加线程池的大小或者调整线程池的参数,例如线程池的最大线程数、空闲线程的存活时间等。
内存问题:如果您的应用程序占用了较多的内存资源,可能会导致垃圾回收时间过长,从而导致线程阻塞和CPU使用率过高。您可以尝试优化应用程序的内存使用,例如减少内存泄漏、增加内存容量等。
其他问题:还有一些其他的因素可能会导致创建物理连接过慢、线程阻塞和CPU使用率过高,例如操作系统的资源限制、磁盘IO性能问题等。您可以尝试对这些因素进行排查和优化。
创建物理连接过慢:数据库连接池在获取连接时,可能需要创建新的物理连接,这个过程可能受到数据库服务器的影响。如果数据库服务器响应较慢,创建物理连接的时间会延长。
CPU 使用率高:当连接池中的连接数达到上限时,新的请求需要等待可用连接。在等待过程中,连接池可能会不断尝试创建物理连接,这可能会导致 CPU 使用率升高。
是因为当时有慢SQL,同时请求量较大,所以连接都被慢SQL占用了,得不到释放,然后大部分线程都在wait 等待链接,等待的线程多了,Load和CPU也就上去了,这就会导致CPU调度不过来,所以wait到时间了,CPU由于忙不过来,所以等待时间就会超过设定的时间
原回答者GitHub用户asasas234
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。