git-svn-id: http://code.alibabatech.com/svn/druid/trunk@397 b9813039-fb51-4c41-a8b9-e21c2acb5095

This commit is contained in:
wenshao
2011-07-13 03:32:06 +00:00
parent 65f27294ba
commit 9c682650cf
3 changed files with 111 additions and 25 deletions
@@ -27,20 +27,20 @@ public class Case3 extends TestCase {
private String validationQuery = null; // "SELECT 1";
private int threadCount = 40;
private int TEST_COUNT = 3;
final int LOOP_COUNT = 1000 * 100;
final int LOOP_COUNT = 1000 * 1;
private boolean testOnBorrow = false;
private String connectionProperties = ""; //"bigStringTryClob=true;clientEncoding=GBK;defaultRowPrefetch=50;serverEncoding=ISO-8859-1";
private String sql = "SELECT 1";
protected void setUp() throws Exception {
jdbcUrl = "jdbc:fake:dragoon_v25masterdb";
user = "dragoon25";
password = "dragoon25";
driverClass = "com.alibaba.druid.mock.MockDriver";
// 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";
jdbcUrl = "jdbc:mysql://10.20.153.104:3306/druid2";
user = "root";
password = "root";
}
public void test_perf() throws Exception {
@@ -10,7 +10,9 @@ import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.NumberFormat;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
@@ -23,6 +25,7 @@ import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import com.alibaba.druid.TestUtil;
import com.alibaba.druid.pool.DruidDataSource;
public class DruidDataSourceUIManager extends JFrame {
@@ -38,6 +41,8 @@ public class DruidDataSourceUIManager extends JFrame {
private JButton btnConnect = new JButton("Get Connection");
private JButton btnClose = new JButton("Close Connection");
private JButton btnCase_0 = new JButton("Case 0");
private JPanel mainPanel = new JPanel();
private JScrollPane scrollPane = new JScrollPane(mainPanel);
@@ -268,12 +273,12 @@ public class DruidDataSourceUIManager extends JFrame {
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtTestWhileIdle, 0, SpringLayout.VERTICAL_CENTER, lbTestWhileIdle);
layout.putConstraint(SpringLayout.WEST, txtTestWhileIdle, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtTestWhileIdle, 0, SpringLayout.EAST, txtUrl);
mainPanel.add(lbTestOnBorrow);
layout.putConstraint(SpringLayout.NORTH, lbTestOnBorrow, 10, SpringLayout.SOUTH, lbTestWhileIdle);
layout.putConstraint(SpringLayout.WEST, lbTestOnBorrow, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbTestOnBorrow, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtTestOnBorrow);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtTestOnBorrow, 0, SpringLayout.VERTICAL_CENTER, lbTestOnBorrow);
layout.putConstraint(SpringLayout.WEST, txtTestOnBorrow, 0, SpringLayout.WEST, txtUrl);
@@ -305,6 +310,7 @@ public class DruidDataSourceUIManager extends JFrame {
btnCloseDataSource.setEnabled(false);
btnConnect.setEnabled(false);
btnClose.setEnabled(false);
btnCase_0.setEnabled(false);
mainPanel.add(btnConnect);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, btnConnect, 0, SpringLayout.VERTICAL_CENTER, btnInitDataSource);
@@ -352,6 +358,23 @@ public class DruidDataSourceUIManager extends JFrame {
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtReleaseStep, 0, SpringLayout.VERTICAL_CENTER, btnInitDataSource);
layout.putConstraint(SpringLayout.WEST, txtReleaseStep, 10, SpringLayout.EAST, btnClose);
layout.putConstraint(SpringLayout.EAST, txtReleaseStep, 40, SpringLayout.WEST, txtReleaseStep);
mainPanel.add(btnCase_0);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, btnCase_0, 0, SpringLayout.VERTICAL_CENTER, txtReleaseStep);
layout.putConstraint(SpringLayout.WEST, btnCase_0, 10, SpringLayout.EAST, txtReleaseStep);
btnCase_0.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
case_0();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
// txtReleaseStep
mainPanel.add(statusPanel);
@@ -382,7 +405,7 @@ public class DruidDataSourceUIManager extends JFrame {
System.out.println("get connection is null");
return;
}
Statement stmt = conn.createStatement();
stmt.setQueryTimeout(5);
ResultSet rs = stmt.executeQuery("SELECT * FROM address LIMIT 10");
@@ -390,7 +413,7 @@ public class DruidDataSourceUIManager extends JFrame {
rs.getObject(1);
}
rs.close();
stmt.close();
activeConnections.add(conn);
@@ -422,6 +445,7 @@ public class DruidDataSourceUIManager extends JFrame {
btnCloseDataSource.setEnabled(false);
btnConnect.setEnabled(false);
btnClose.setEnabled(false);
btnCase_0.setEnabled(false);
statusThread.interrupt();
}
@@ -469,6 +493,7 @@ public class DruidDataSourceUIManager extends JFrame {
btnCloseDataSource.setEnabled(true);
btnConnect.setEnabled(true);
btnClose.setEnabled(true);
btnCase_0.setEnabled(true);
statusThread = new Thread("Watch Status") {
@@ -504,6 +529,64 @@ public class DruidDataSourceUIManager extends JFrame {
}
}
public void case_0() throws Exception {
Runnable task = new Runnable() {
public void run() {
final int threadCount = 40;
final int LOOP_COUNT = 1000 * 1000;
final String sql = "SELECT 1";
final CountDownLatch startLatch = new CountDownLatch(1);
final CountDownLatch endLatch = new CountDownLatch(1);
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();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (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();
try {
endLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long millis = System.currentTimeMillis() - startMillis;
long ygc = TestUtil.getYoungGC() - startYGC;
long fullGC = TestUtil.getFullGC() - startFullGC;
System.out.println("thread " + threadCount + " druid millis : " + NumberFormat.getInstance().format(millis) + ", YGC " + ygc + " FGC " + fullGC);
}
};
executor.submit(task);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {