generic-pool mysql_GenericObjectPool对象池使用优化

背景

某应用1.0性能测试

服务强依赖于mysql, 许多接口都会请求mysql

对mysql的请求用GenericObjectPool的连接池来进行管理, 设置如下:

79 connectionPool.setMaxActive(maxActive);

80 connectionPool.setTestOnBorrow(false);

81 connectionPool.setTestOnReturn(true);

82 connectionPool.setTestWhileIdle(true);

83 connectionPool

84 .setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);

85

86 // Start the Evictor

87 connectionPool

88 .setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);

问题

用100并发打压服务,发现拿到连接并在干活的线程数只有10+, 而其余80+的线程wait在borrowObject的逻辑, 相应的stack如下:

有许多线程在blocked在makeObject相关的逻辑,均在等一把锁

1462 "resin-tcp-connection-*:3231-321" daemon prio=10 tid=0x000000004dc43800 nid=0x65f5 waiting for monitor entry [0x00000000507ff000]

1463 java.lang.Thread.State: BLOCKED (on object monitor)

1464 at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290)

1465 - waiting to lock <0x00000000b26ee8a8> (a org.apache.commons.dbcp.PoolableConnectionFactory)

1466 at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771)

1467 at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)

1468 at outfox.cps.dao.source.CpsDataSource.getConnection(CpsDataSource.java:61)

1469 at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)

1470 at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)

1471 at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:572)

1472 at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)

1473 at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)

1474

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值