From 93550759d90856f1fe97518001cb83fd3f089c05 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 7 Sep 2011 17:22:44 +0000 Subject: [PATCH] =?UTF-8?q?JMX=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@685 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../java/com/alibaba/druid/pool/DruidDataSource.java | 12 ++++++++++++ .../com/alibaba/druid/pool/DruidDataSourceMBean.java | 4 ++++ .../druid/stat/DruidDataSourceStatManager.java | 5 +++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 9abce18900..f620aa2335 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -76,6 +76,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private long destroyCount = 0L; private long removeAbandonedCount = 0L; private long notEmptyWaitCount = 0L; + private long notEmptyWaitNanos = 0L; // store private ConnectionHolder[] connections; @@ -104,6 +105,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat destroyCount = 0; removeAbandonedCount = 0; notEmptyWaitCount = 0; + notEmptyWaitNanos = 0; } finally { lock.unlock(); } @@ -583,8 +585,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } try { + long startEstimate = estimate; estimate = notEmpty.awaitNanos(estimate); // signal by recycle or creator notEmptyWaitCount++; + notEmptyWaitNanos += (startEstimate - estimate); if (!enable) { connectErrorCount++; @@ -946,6 +950,14 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat public long getNotEmptyWaitCount() { return notEmptyWaitCount; } + + public long getNotEmptyWaitMillis() { + return notEmptyWaitNanos / (1000 * 1000); + } + + public long getNotEmptyWaitNanos() { + return notEmptyWaitNanos; + } public int getLockQueueLength() { return lock.getQueueLength(); diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java index 962d6cb35a..8202281dc2 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java @@ -32,5 +32,9 @@ public interface DruidDataSourceMBean extends DruidAbstractDataSourceMBean { long getNotEmptyWaitCount(); + long getNotEmptyWaitMillis(); + + long getNotEmptyWaitNanos(); + void resetStat(); } diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java index 5f2406a15b..1c9d1cb02e 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java @@ -98,6 +98,7 @@ public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBe map.put("RemoveAbandonedCount", dataSource.getRemoveAbandonedCount()); map.put("NotEmptyWaitCount", dataSource.getNotEmptyWaitCount()); + map.put("NotEmptyWaitNanos", dataSource.getNotEmptyWaitNanos()); return new CompositeDataSupport(rowType, map); } @@ -117,7 +118,7 @@ public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBe SimpleType.INTEGER, SimpleType.INTEGER, SimpleType.INTEGER, SimpleType.BOOLEAN, SimpleType.BOOLEAN, // SimpleType.BOOLEAN, SimpleType.LONG, SimpleType.LONG, SimpleType.LONG, SimpleType.STRING, // SimpleType.STRING, SimpleType.INTEGER, SimpleType.STRING, SimpleType.STRING, SimpleType.LONG, // - SimpleType.LONG, + SimpleType.LONG, SimpleType.LONG, // }; @@ -128,7 +129,7 @@ public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBe "InitialSize", "MaxActive", "MinIdle", "PoolPreparedStatements", "TestOnBorrow", // "TestOnReturn", "MinEvictableIdleTimeMillis", "ConnectErrorCount", "CreateTimespanMillis", "DbType", // "ValidationQuery", "ValidationQueryTimeout", "DriverClassName", "Username", "RemoveAbandonedCount", // - "NotEmptyWaitCount" + "NotEmptyWaitCount", "NotEmptyWaitNanos" // };