From 9d4d45512b610a54c140f18a7783c5fd402de7f4 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 23 Dec 2011 15:36:23 +0800 Subject: [PATCH] jmx support enhanced --- .../alibaba/druid/pool/DruidDataSource.java | 19 ++++++++++++++++++- .../stat/DruidDataSourceStatManager.java | 4 ++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index c4ad663c51..b14c4a8c07 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -94,6 +94,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private int poolingCount = 0; private int activeCount = 0; private int notEmptyWaitThreadCount = 0; + private int notEmptyWaitThreadPeak = 0; // threads private CreateConnectionThread createConnectionThread; @@ -673,6 +674,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat while (poolingCount == 0) { empty.signal(); // send signal to CreateThread create connection notEmptyWaitThreadCount++; + if (notEmptyWaitThreadCount > notEmptyWaitThreadPeak) { + notEmptyWaitThreadPeak = notEmptyWaitThreadCount; + } try { notEmpty.await(); // signal by recycle or creator } finally { @@ -710,6 +714,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } notEmptyWaitThreadCount++; + if (notEmptyWaitThreadCount > notEmptyWaitThreadPeak) { + notEmptyWaitThreadPeak = notEmptyWaitThreadCount; + } + try { long startEstimate = estimate; estimate = notEmpty.awaitNanos(estimate); // signal by @@ -810,7 +818,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat lock.unlock(); } } - + public boolean isBusy() { lock.lock(); try { @@ -1142,6 +1150,15 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat public int getNotEmptyWaitThreadCount() { return notEmptyWaitThreadCount; } + + public int getNotEmptyWaitThreadPeak() { + lock.lock(); + try { + return notEmptyWaitThreadPeak; + } finally { + lock.unlock(); + } + } public long getNotEmptySignalCount() { return notEmptySignalCount; diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java index ec5760197d..1b113800d8 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java @@ -166,10 +166,10 @@ public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBe map.put("ConnectCount", dataSource.getConnectCount()); map.put("CloseCount", dataSource.getCloseCount()); - map.put("ActiveCount", dataSource.getActiveCount()); + map.put("ActiveCount", dataSource.getActivePeak()); map.put("PoolingCount", dataSource.getPoolingCount()); map.put("LockQueueLength", dataSource.getLockQueueLength()); - map.put("WaitThreadCount", dataSource.getWaitThreadCount()); + map.put("WaitThreadCount", dataSource.getNotEmptyWaitThreadPeak()); map.put("InitialSize", dataSource.getInitialSize()); map.put("MaxActive", dataSource.getMaxActive());