进行性能测试的时候经过一段时间的运行,系统停止响应
从数据库端看,连接全部sleep状态,没有阻塞
导出线程信息,发现存在一些阻塞信息
不知哪位大哥碰到过这种情况,请帮忙分析一下
系统配置如下:
tomcat 5.5
spring 2.0.6
hibernate 3.2.5
c3p0 0.9.1-pre-9
mysql 5.0.22具体线程信息如下:名称: TP-Processor12
状态:WAITING 在 com.mchange.v2.resourcepool.BasicResourcePool@13e4a5a 上
阻塞总数:36  等待总数: 4,702堆栈追踪: 
java.lang.Object.wait(Native Method)
com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1155)
com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:405)
com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:351)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:466)
com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:125)
org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:510)
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350)
org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:262)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:102)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)

解决方案 »

  1.   

    此时CPU情况如何?
    能否把比较全的JavaCore放上来一下。
    建议升级Spring到spring 2.5.4以上看看
      

  2.   

    import java.sql.Connection;import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3p0Util {
    static String driver_2005="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    static String url_2005="jdbc:sqlserver://localhost:1433;databasename=pubs";

    static String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
    static String url = "jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs";
    static String user = "sa";
    static String password = null; static ComboPooledDataSource cpds = null; static {
    try {
    cpds = new ComboPooledDataSource();
    //driver 2000
    //cpds.setDriverClass(driver);
    //cpds.setJdbcUrl(url);
    //driver2005
    cpds.setDriverClass(driver_2005);
    cpds.setJdbcUrl(url_2005);
    cpds.setUser(user);
    cpds.setPassword(password);
    } catch (Exception e) {
    e.printStackTrace();
    }
    } //获取连接
    public static Connection getConnection() {
    Connection conn = null;
    try {
    conn = cpds.getConnection();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return conn;
    }

    public static void main(String[] args) {
    Connection conn = C3p0Util.getConnection();
    System.out.println(conn);
    }
    }
      

  3.   

    当时这个问题应该没有解决,又碰上了人事变动,好久没来结贴了,sigh
      

  4.   

    我也碰到类似问题啊dump了线程如下:Thread http-5081-Processor122: 
      at java.lang.Object.wait(long)
      at com.mchange.v2.resourcepool.BasicResourcePool.awaitAcquire(long)
      at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(long)
      at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection()
      at com.mchange.v2.c3p0.PoolBackedDataSource.getConnection()
      at com.mchange.v2.c3p0.ComboPooledDataSource.getConnection()
      at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(javax.sql.DataSource)
      at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(javax.sql.DataSource)
      at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(org.springframework.orm.ibatis.SqlMapClientCallback)
      at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForObject(java.lang.String, java.lang.Object)类似的线程很多这样的,全部在等待,没有释放连接,c3p0使用0.9.0版本