Skip to content

Instantly share code, notes, and snippets.

@kymtwyf
Created November 21, 2015 15:48
Show Gist options
  • Save kymtwyf/4236152ee36d9388ae76 to your computer and use it in GitHub Desktop.
Save kymtwyf/4236152ee36d9388ae76 to your computer and use it in GitHub Desktop.
tomcat hangs

这两天发现我的tomcat总是用着用着莫名其妙地不返回东西了,也不报错。然后去查了一下java进程,做了一个dump发现非常多这样的进程:

"http-bio-8080-exec-14" daemon prio=10 tid=0x00007f8670011800 nid=0x6ed2 waiting for monitor entry [0x00007f86f55a7000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:781)
    - waiting to lock <0x0000000600af2938> (a org.apache.commons.pool.impl.GenericObjectPool)
    at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:81)
    at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
    at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:279)
    at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:72)
    at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:59)
    at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:96)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:77)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)
    at sun.reflect.GeneratedMethodAccessor158.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)
    at com.sun.proxy.$Proxy71.selectList(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:198)
    at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:119)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
    at com.sun.proxy.$Proxy72.getFirstLevelList(Unknown Source)
    ... 有点儿长

在stackoverflow上面看到一个Answer 吐槽DBCP然后又推荐了tomcat自己的jdbc pool

换了一下之后到现在为止没出过问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment