IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [转]常用Java数据库连接池性能测试

    testcs_dn发表于 2017-03-27 13:01:51
    love 0

    这个测试的目的是验证当前常用数据库连接池的性能。

    testcase

      Connection conn = dataSource.getConnection();
      PreparedStatement stmt = conn.preparedStatement("select 1");
      ResultSet rs = stmt.executeQuery();
      while (rs.next()) {
      }
      rs.close();
      stmt.close();
      conn.close();
    
    • test codehttps://github.com/alibaba/druid/blob/master/src/test/java/com/alibaba/druid/benckmark/pool/Case1.java

    • test config

    propertyvalue
    initialSize10
    minPoolSize10
    maxPoolSize50

    测试各种并发场景下执行申请1,000,000(一百万)次总耗时的性能对比。

    #环境

    • OS linux 3.5.0-19-generic X86_64
    • CPU XEON E5-2450 双路共16核32物理线程
    • Memory 48G

    这是一台双路至强CPU的工作站,比我之前在mac book pro上做的测试,更接近真实服务器的运行环境。

    JDK 1.6.0_38

    数据库连接池1 thread2 threads5 threads10 threads20 threads50 threads100 threads
    druid2487101,1331,1349051,1071,468
    dbcp6601,5223,5454,1763,6714,23714,129
    boneCP3,5222,9302,5793,7457,43411,99114,584
    c3p04,2759,5093,37110,43913,47219,84836,153
    proxool7,1877,70711,03710,77715,222(Error)18,100(Error)21,547(Error)
    tomcat-jdbc3727361,8791,7271,5761,32212,545
    jboss-datasource1,3261,1842,9283,7653,0993,27810,812

    JDK 1.7.0_10

    数据库连接池1 thread2 threads5 threads10 threads20 threads50 threads100 threads
    druid3096051,0289479628971,238
    dbcp9241,4614,0624,0304,9085,50514,517
    boneCP3,0472,0552,5493,8216,36712,86518,832
    c3p04,0188,2068,89710,66712,36725,82238,681
    proxool69124,7144,85111,90816,066(Error)19,568(Error)18,036(Error)
    tomcat-jdbc4007401,8111,7071,6181,62411,905
    jboss-datasource1,3691,1054,0023,0893,4833,66511,782

    结果分析

    1. Druid是性能最好的数据库连接池,tomcat-jdbc和druid性能接近。
    2. proxool在激烈并发时会抛异常,完全不靠谱。在并发10的情况下,会使用11或者12个物理连接。
    3. c3p0和proxool都相当慢,慢到影响sql执行效率的地步。
    4. bonecp性能并不优越,采用LinkedTransferQueue并没有能够获得性能提升。
    5. jboss-datasource虽然稳定,但是性能很糟糕
    6. boneCP和c3p0完全不遵循minPoolSize的配置,只要有活动请求,就会用到maxPoolSize。
    7. bonecp和c3p0存在较大并发时使用的物理连接超过maxPoolSize数量,达到maxPoolSize+1
    来源:https://github.com/alibaba/druid/wiki/linux-benchmark


沪ICP备19023445号-2号
友情链接