@红薯 你好,想跟你请教个问题:用jconsole查看到网站的线程情况,发现大量c3p0线程被阻塞,如下:
名称: com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1 状态: com.mchange.v2.async.ThreadPoolAsynchronousRunner@871664上的TIMED_WAITING 总阻止数: 31,330, 总等待数: 76,038 堆栈跟踪: java.lang.Object.wait(Native Method) com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
其中c3p0的配置也是参考oschina的设置的,用的是c3p0-0.9.1.2.jar:
# DataSource jdbc.datasource=com.mchange.v2.c3p0.ComboPooledDataSource jdbc.show_sql=true # Database Configurations jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc:mysql://localhost:3306/sisdb?autoReconnect=true&useUnicode=true&characterEncoding=utf-8 jdbc.user=root jdbc.password=****** jdbc.maxPoolSize=100 jdbc.minPoolSize=2 jdbc.initialPoolSize=2 jdbc.acquireIncrement=2 jdbc.maxStatements=0 jdbc.maxIdleTime=300 jdbc.checkoutTimeout=5000
目前网站访问运行也很正常,请问老大,这种被blocked的情况一般是什么导致的?如果继续下去,网站会挂吗?如何避免这种情况的出现?如何stop阻塞的线程?谢谢!
如果你用 filter 关闭数据库连接,要注意一个问题:如果某个 action 处理请求耗时过长,这个 action 访问量大的话,就可能会导致大量数据库连接被占用,这种情况最好用完就关闭。