压力测试并发一上来dbcp线程block,换了druid就正常了,是代码的问题吗

发布于 2021-12-03 03:34:25 字数 4361 浏览 922 评论 5

   之前生产上的系统连接池一直用的dbcp,最近一个系统做压力测试,并发达到200左右,就出问题,查看线程发现如下问题,不是很懂,试着换了druid,结果就正常了。。。2000个,

"http-9080-97" daemon prio=10 tid=0x00007fc1780ab800 nid=0x304f waiting for monitor entry [0x00007fc2493d1000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290)
	- waiting to lock <0x00000007fdf78da0> (a org.apache.commons.dbcp.PoolableConnectionFactory)
	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771)
	at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:74)
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:203)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:372)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:417)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:255)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at com.sun.proxy.$Proxy2.setLogId(Unknown Source)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at de.javakaffee.web.msm.RequestTrackingContextValve.invoke(RequestTrackingContextValve.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at de.javakaffee.web.msm.RequestTrackingHostValve.invoke(RequestTrackingHostValve.java:170)
	at de.javakaffee.web.msm.RequestTrackingHostValve.invoke(RequestTrackingHostValve.java:138)
	at de.javakaffee.web.msm.RequestTrackingHostValve.invoke(RequestTrackingHostValve.java:170)
	at de.javakaffee.web.msm.RequestTrackingHostValve.invoke(RequestTrackingHostValve.java:138)
	at de.javakaffee.web.msm.RequestTrackingHostValve.invoke(RequestTrackingHostValve.java:138)
	at de.javakaffee.web.msm.RequestTrackingHostValve.invoke(RequestTrackingHostValve.java:138)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:745)



但是因为之前生产上没用过druid,客户担心druid稳定性之类的。。。dbcp配置在下边
<property name="maxIdle"> 
			<value>30</value>
		</property>
		<property name="maxActive">
			<value>150</value>
		</property>
		<property name="maxWait">
			<value>10000</value>
		</property>
		<property name="removeAbandoned">
			<value>true</value>
		</property>
		<property name="removeAbandonedTimeout">
			<value>120</value>
		</property>
		<property name="testOnBorrow">
          <value>true</value>
        </property>



大神帮忙看下上边这个错误可能是dbcp配置的问题或者说是代码的问题吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

檐上三寸雪 2021-12-05 08:09:36

好像Druid和DBCP的保活机制不一样  如果一个数据库TCP连接有防火墙  然后用户的并发时打时效 好像有问题

各自安好 2021-12-05 08:01:09

druid是国内使用最广的连接池?

冷默言语 2021-12-05 04:16:26

druid是国内使用最广的连接池,阿里巴巴tddl/oceanbase指定的数据连接池。目前Java语言稳定性最好的数据连接池。

柳若烟 2021-12-05 02:03:01

冏~~不是窝,是客户那边。。

英雄似剑 2021-12-05 01:57:20

阿里的生产环境都在用druid,你还担心稳定性?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文