是的,经过多年的设计分析和思考.我知道这是设计上的问题。就像评论说的。提供数千个到Hikari的连接,并不意味着数据库将处理数千个连接请求。因此,设计必须更新为最佳的数据库连接,线程必须等待下一个可用的连接。如果你的线程没有按时完成,仍然在几分钟内工作,那么几个小时。你做了什么让成千上万的线程连接到其他线程。这是错误的!完全错了!给成千上万的线程连接并不意味着一切都解决了。如果你认为我们有出色的表现:)这是失败的成功。
我有螺纹系统。7000线程处理一些复杂的任务。
我们有java解决方案: spring,hibernate用于持久性,log4j2,hikari连接池用于db访问(它是用bean加载和管理的)
在此之前,我将Hikari连接池大小设置为线程大小的30%。但是我们得到了这个连接不可用,请求超时后30025 is .错误。在此错误之后,我无法修复停止的服务。我试图将db池大小增加到8000。
线程大小是: 7000,db池大小是:8000。
但我突然发现了这个错误。发生什么事了?有人可以解释为什么db连接不适合这个服务?
我阅读了大多数用户使用最小化池大小(例如20.000线程,但只有20 db池大小)运行他们的服务。怎么做呢?你能解释一下我的服务设计问题是什么吗?
是的,我有@Transactional注释,并且需要在复杂的taks中的许多功能上添加新的功能。有问题吗?这是重点吗?
你能帮我找出主要问题吗?
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC
Connection at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)
Caused by: org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
Caused by: java.sql.SQLTransientConnectionException: springHikariCP - Connection is not available, request timed out after 30025ms.
Caused by: java.sql.SQLException: Network error IOException: Address already in use: connect
Caused by: java.net.BindException: Address already in use: connect发布于 2017-10-23 11:49:42
仅仅因为允许程序同时使用到数据库的数千个连接,并不意味着数据库能够处理它们。这就是为什么在一段时间后,增加连接就会产生相反的效果(几十个,甚至几百个)。
您可以配置等待空闲连接的超时时间(在示例中为30秒),但这不会改变这样一个事实:如果您试图在一个大小很差的服务器上做很多事情,您就会遇到麻烦。
获得更大的db (或扩展),使用更少的线程,或尝试在数据库中查找性能热点,您可以优化。
https://stackoverflow.com/questions/46888512
复制相似问题