diff --git a/pom.xml b/pom.xml index fb530a31a9..d3457f5bac 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ default - + opensesame @@ -40,13 +40,13 @@ http://code.alibabatech.com/jira/browse/DRUID - - - org.apache.maven.wagon - wagon-webdav - 1.0-beta-2 - - + + + org.apache.maven.wagon + wagon-webdav + 1.0-beta-2 + + @@ -69,7 +69,7 @@ - + org.apache.maven.plugins maven-source-plugin @@ -88,7 +88,7 @@ - + default-profile @@ -138,7 +138,7 @@ - + @@ -228,6 +228,12 @@ 1.0.6 test - + + com.alibaba.china.shared + headquarters.jdbc.proxy + 1.1 + test + + \ No newline at end of file diff --git a/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin_Oracle.java b/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin_Oracle.java new file mode 100644 index 0000000000..ed968b08ca --- /dev/null +++ b/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin_Oracle.java @@ -0,0 +1,171 @@ +package com.alibaba.druid.pool.benckmark; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.text.NumberFormat; +import java.util.concurrent.CountDownLatch; + +import javax.sql.DataSource; + +import junit.framework.TestCase; + +import org.apache.commons.dbcp.BasicDataSource; + +import com.alibaba.druid.TestUtil; +import com.alibaba.druid.pool.DruidDataSource; + +public class CaseKylin_Oracle extends TestCase { + + private String jdbcUrl; + private String user; + private String password; + private String driverClass; + private int initialSize = 1; + private int minIdle = 1; + private int maxIdle = 14; + private int maxActive = 14; + private int maxWait = 60000; + private String validationQuery = null; // "SELECT 1"; + private int threadCount = 15; + private int TEST_COUNT = 3; + final int LOOP_COUNT = 1000 * 100; + private boolean testWhileIdle = true; + private boolean testOnBorrow = true; + private boolean testOnReturn = false; + + private boolean removeAbandoned = true; + private int removeAbandonedTimeout = 180; + private long timeBetweenEvictionRunsMillis = 60000; + private long minEvictableIdleTimeMillis = 1800000; + private int numTestsPerEvictionRun = 20; + private String validateQuery = "SELECT @@SQL_MODE"; + + protected void setUp() throws Exception { + // jdbcUrl = "jdbc:fake:dragoon_v25masterdb"; + // user = "dragoon25"; + // password = "dragoon25"; + // driverClass = "com.alibaba.druid.mock.MockDriver"; + + // jdbcUrl = "jdbc:mysql://10.20.153.104:3306/druid2"; + // user = "root"; + // password = "root"; + // driverClass = "com.mysql.jdbc.Driver"; + + jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + user = "alibaba"; + password = "ccbuauto"; + driverClass = "oracle.jdbc.driver.OracleDriver"; + } + + public void test_perf() throws Exception { + for (int i = 0; i < 5; ++i) { + druid(); + dbcp(); + } + } + + public void druid() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + + dataSource.setInitialSize(initialSize); + dataSource.setMaxActive(maxActive); + dataSource.setMaxIdle(maxIdle); + dataSource.setMinIdle(minIdle); + dataSource.setMaxWait(maxWait); + dataSource.setPoolPreparedStatements(true); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(jdbcUrl); + dataSource.setPoolPreparedStatements(true); + dataSource.setUsername(user); + dataSource.setPassword(password); + dataSource.setValidationQuery(validationQuery); + dataSource.setTestOnBorrow(testOnBorrow); + dataSource.setTestOnBorrow(testWhileIdle); + dataSource.setTestOnBorrow(testOnReturn); + dataSource.setRemoveAbandoned(removeAbandoned); + dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout); + dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + dataSource.setNumTestsPerEvictionRun(numTestsPerEvictionRun); + dataSource.setValidationQuery(validateQuery); + + for (int i = 0; i < TEST_COUNT; ++i) { + p0(dataSource, "druid", threadCount); + } + System.out.println(); + } + + public void dbcp() throws Exception { + final BasicDataSource dataSource = new BasicDataSource(); + + dataSource.setInitialSize(initialSize); + dataSource.setMaxActive(maxActive); + dataSource.setMaxIdle(maxIdle); + dataSource.setMinIdle(minIdle); + dataSource.setMaxWait(maxWait); + dataSource.setPoolPreparedStatements(true); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(jdbcUrl); + dataSource.setPoolPreparedStatements(true); + dataSource.setUsername(user); + dataSource.setPassword(password); + dataSource.setValidationQuery(validationQuery); + dataSource.setTestOnBorrow(testOnBorrow); + dataSource.setTestOnBorrow(testWhileIdle); + dataSource.setTestOnBorrow(testOnReturn); + dataSource.setRemoveAbandoned(removeAbandoned); + dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout); + dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + dataSource.setNumTestsPerEvictionRun(numTestsPerEvictionRun); + dataSource.setValidationQuery(validateQuery); + + for (int i = 0; i < TEST_COUNT; ++i) { + p0(dataSource, "dbcp", threadCount); + } + System.out.println(); + } + + private void p0(final DataSource dataSource, String name, int threadCount) throws Exception { + + final CountDownLatch startLatch = new CountDownLatch(1); + final CountDownLatch endLatch = new CountDownLatch(threadCount); + for (int i = 0; i < threadCount; ++i) { + Thread thread = new Thread() { + + public void run() { + try { + startLatch.await(); + + for (int i = 0; i < LOOP_COUNT; ++i) { + Connection conn = dataSource.getConnection(); + PreparedStatement stmt = conn.prepareStatement("SELECT 1 FROM DUAL"); + ResultSet rs = stmt.executeQuery(); + rs.next(); + rs.getInt(1); + rs.close(); + stmt.close(); + conn.close(); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + endLatch.countDown(); + } + }; + thread.start(); + } + long startMillis = System.currentTimeMillis(); + long startYGC = TestUtil.getYoungGC(); + long startFullGC = TestUtil.getFullGC(); + startLatch.countDown(); + endLatch.await(); + + long millis = System.currentTimeMillis() - startMillis; + long ygc = TestUtil.getYoungGC() - startYGC; + long fullGC = TestUtil.getFullGC() - startFullGC; + + System.out.println("thread " + threadCount + " " + name + " millis : " + NumberFormat.getInstance().format(millis) + ", YGC " + ygc + " FGC " + fullGC); + } +} diff --git a/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin.java b/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin_mysql.java similarity index 94% rename from src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin.java rename to src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin_mysql.java index 047881f2d8..19b8b59764 100644 --- a/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin.java +++ b/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin_mysql.java @@ -15,7 +15,7 @@ import org.apache.commons.dbcp.BasicDataSource; import com.alibaba.druid.TestUtil; import com.alibaba.druid.pool.DruidDataSource; -public class CaseKylin extends TestCase { +public class CaseKylin_mysql extends TestCase { private String jdbcUrl; private String user; @@ -46,15 +46,15 @@ public class CaseKylin extends TestCase { // password = "dragoon25"; // driverClass = "com.alibaba.druid.mock.MockDriver"; -// jdbcUrl = "jdbc:mysql://10.20.153.104:3306/druid2"; -// user = "root"; -// password = "root"; -// driverClass = "com.mysql.jdbc.Driver"; + jdbcUrl = "jdbc:mysql://10.20.153.104:3306/druid2"; + user = "root"; + password = "root"; + driverClass = "com.mysql.jdbc.Driver"; - jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; - user = "alibaba"; - password = "ccbuauto"; - driverClass = "oracle.jdbc.driver.OracleDriver"; +// jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; +// user = "alibaba"; +// password = "ccbuauto"; +// driverClass = "oracle.jdbc.driver.OracleDriver"; } public void test_perf() throws Exception { diff --git a/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin_mysql_idle.java b/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin_mysql_idle.java new file mode 100644 index 0000000000..8351a028ac --- /dev/null +++ b/src/test/java/com/alibaba/druid/pool/benckmark/CaseKylin_mysql_idle.java @@ -0,0 +1,172 @@ +package com.alibaba.druid.pool.benckmark; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.text.NumberFormat; +import java.util.concurrent.CountDownLatch; + +import javax.sql.DataSource; + +import junit.framework.TestCase; + +import org.apache.commons.dbcp.BasicDataSource; + +import com.alibaba.druid.TestUtil; +import com.alibaba.druid.pool.DruidDataSource; + +public class CaseKylin_mysql_idle extends TestCase { + + private String jdbcUrl; + private String user; + private String password; + private String driverClass; + private int initialSize = 1; + private int minIdle = 1; + private int maxIdle = 20; + private int maxActive = 20; + private int maxWait = 60000; + private String validationQuery = null; // "SELECT 1"; + private int threadCount = 15; + private int TEST_COUNT = 3; + final int LOOP_COUNT = 1000 * 1; + private boolean testWhileIdle = true; + private boolean testOnBorrow = false; + private boolean testOnReturn = false; + + private boolean removeAbandoned = true; + private int removeAbandonedTimeout = 180; + private long timeBetweenEvictionRunsMillis = 60000; + private long minEvictableIdleTimeMillis = 1800000; + private int numTestsPerEvictionRun = 20; + + protected void setUp() throws Exception { + // jdbcUrl = "jdbc:fake:dragoon_v25masterdb"; + // user = "dragoon25"; + // password = "dragoon25"; + // driverClass = "com.alibaba.druid.mock.MockDriver"; + + jdbcUrl = "jdbc:mysql://10.20.141.150:8066/amoeba"; + user = "root"; + password = "12345"; + driverClass = "com.mysql.jdbc.Driver"; + + // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto"; + // user = "alibaba"; + // password = "ccbuauto"; + // driverClass = "oracle.jdbc.driver.OracleDriver"; + } + + public void test_perf() throws Exception { + druid(); + } + + public void druid() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + + dataSource.setInitialSize(initialSize); + dataSource.setMaxActive(maxActive); + dataSource.setMaxIdle(maxIdle); + dataSource.setMinIdle(minIdle); + dataSource.setMaxWait(maxWait); + dataSource.setPoolPreparedStatements(true); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(jdbcUrl); + dataSource.setPoolPreparedStatements(true); + dataSource.setUsername(user); + dataSource.setPassword(password); + dataSource.setValidationQuery(validationQuery); + dataSource.setTestOnBorrow(testOnBorrow); + dataSource.setTestOnBorrow(testWhileIdle); + dataSource.setTestOnBorrow(testOnReturn); + dataSource.setRemoveAbandoned(removeAbandoned); + dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout); + dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + dataSource.setNumTestsPerEvictionRun(numTestsPerEvictionRun); + + p0(dataSource, "druid", threadCount); + + for (int i = 0; i < 30; ++i) { + Thread.sleep(1000 * 30); + System.out.println("sleep " + i); + } + + for (int i = 0; i < TEST_COUNT; ++i) { + p0(dataSource, "druid", threadCount); + } + System.out.println(); + } + + public void dbcp() throws Exception { + final BasicDataSource dataSource = new BasicDataSource(); + + dataSource.setInitialSize(initialSize); + dataSource.setMaxActive(maxActive); + dataSource.setMaxIdle(maxIdle); + dataSource.setMinIdle(minIdle); + dataSource.setMaxWait(maxWait); + dataSource.setPoolPreparedStatements(true); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(jdbcUrl); + dataSource.setPoolPreparedStatements(true); + dataSource.setUsername(user); + dataSource.setPassword(password); + dataSource.setValidationQuery(validationQuery); + dataSource.setTestOnBorrow(testOnBorrow); + dataSource.setTestOnBorrow(testWhileIdle); + dataSource.setTestOnBorrow(testOnReturn); + dataSource.setRemoveAbandoned(removeAbandoned); + dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout); + dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + dataSource.setNumTestsPerEvictionRun(numTestsPerEvictionRun); + + for (int i = 0; i < TEST_COUNT; ++i) { + p0(dataSource, "dbcp", threadCount); + } + System.out.println(); + } + + private void p0(final DataSource dataSource, String name, int threadCount) throws Exception { + + final CountDownLatch startLatch = new CountDownLatch(1); + final CountDownLatch endLatch = new CountDownLatch(threadCount); + for (int i = 0; i < threadCount; ++i) { + Thread thread = new Thread() { + + public void run() { + try { + startLatch.await(); + + for (int i = 0; i < LOOP_COUNT; ++i) { + Connection conn = dataSource.getConnection(); + PreparedStatement stmt = conn.prepareStatement("SELECT 1 FROM DUAL"); + ResultSet rs = stmt.executeQuery(); + rs.next(); + rs.getInt(1); + rs.close(); + stmt.close(); + conn.close(); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + endLatch.countDown(); + } + }; + thread.start(); + } + long startMillis = System.currentTimeMillis(); + long startYGC = TestUtil.getYoungGC(); + long startFullGC = TestUtil.getFullGC(); + startLatch.countDown(); + endLatch.await(); + + long millis = System.currentTimeMillis() - startMillis; + long ygc = TestUtil.getYoungGC() - startYGC; + long fullGC = TestUtil.getFullGC() - startFullGC; + + System.out.println("thread " + threadCount + " " + name + " millis : " + NumberFormat.getInstance().format(millis) + ", YGC " + ygc + " FGC " + fullGC); + } +}