java.lang.Thread.State:等待(停车)
java.lang.Thread.State: WAITING (parking)
我们在 Web 应用程序中使用 spring、SOLR 和 Oracle + hibernate。
开发者虽然写了一些不正确的代码,并在一些与SOLR通信的方法上标注了@Transactional注解。
此外,我们可以在线程转储中看到线程在进入这些方法时处于等待状态或阻塞状态,即原因似乎是这些方法的事务行为
1) 似乎正在创建休眠连接,尽管它不是必需的,这导致其他线程等待连接,但由于连接中可用的连接有限,它们无法拥有它,从而导致线程的 wait/block 状态。
2) 此外,在某些情况下,从连接池获得连接并正在调用其他事务性服务方法的服务方法线程会进入锁定状态。
这反过来又耗尽了连接池中的连接
请问推论是否正确,如果不正确可否指点一下
我认为责怪 @Transactional
注释或添加它的开发人员是不对的。它仅用于您的事务管理,而不是连接池。
我认为应该增加连接池中的连接数。
如果单独使用@Transactional
注释的方法有问题,并且您的可用连接有限,那么问题似乎出在您所遵循的连接池机制上。请尝试增加可用连接数。
我们在 Web 应用程序中使用 spring、SOLR 和 Oracle + hibernate。
开发者虽然写了一些不正确的代码,并在一些与SOLR通信的方法上标注了@Transactional注解。
此外,我们可以在线程转储中看到线程在进入这些方法时处于等待状态或阻塞状态,即原因似乎是这些方法的事务行为
1) 似乎正在创建休眠连接,尽管它不是必需的,这导致其他线程等待连接,但由于连接中可用的连接有限,它们无法拥有它,从而导致线程的 wait/block 状态。
2) 此外,在某些情况下,从连接池获得连接并正在调用其他事务性服务方法的服务方法线程会进入锁定状态。 这反过来又耗尽了连接池中的连接
请问推论是否正确,如果不正确可否指点一下
我认为责怪 @Transactional
注释或添加它的开发人员是不对的。它仅用于您的事务管理,而不是连接池。
我认为应该增加连接池中的连接数。
如果单独使用@Transactional
注释的方法有问题,并且您的可用连接有限,那么问题似乎出在您所遵循的连接池机制上。请尝试增加可用连接数。