This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch TyMoreMBean in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit f9ab7dc99dbba2f6c69375e3e23d7bdc7bc72802 Author: JackieTien97 <[email protected]> AuthorDate: Tue May 12 16:32:45 2020 +0800 Add more JMX MBean --- .../db/engine/cache/CacheHitRatioMonitor.java | 65 ++++++++++++++++++++-- .../engine/cache/CacheHitRatioMonitorMXBean.java | 27 +++++++++ .../apache/iotdb/db/engine/cache/ChunkCache.java | 19 ++++++- .../iotdb/db/engine/cache/ChunkMetadataCache.java | 32 +++++++---- .../iotdb/db/engine/cache/LRULinkedHashMap.java | 31 ++++++++--- .../db/engine/cache/TimeSeriesMetadataCache.java | 17 +++++- 6 files changed, 164 insertions(+), 27 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitor.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitor.java index 3d5f4f5..2c411ac 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitor.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitor.java @@ -28,8 +28,6 @@ import org.slf4j.LoggerFactory; public class CacheHitRatioMonitor implements CacheHitRatioMonitorMXBean, IService { - double chunkMetaDataHitRatio; - double tsfileMetaDataHitRatio; private static Logger logger = LoggerFactory.getLogger(CacheHitRatioMonitor.class); static final CacheHitRatioMonitor instance = AsyncCacheHitRatioHolder.DISPLAYER; @@ -56,8 +54,27 @@ public class CacheHitRatioMonitor implements CacheHitRatioMonitorMXBean, IServic @Override public double getChunkMetaDataHitRatio() { - chunkMetaDataHitRatio = ChunkMetadataCache.getInstance().calculateChunkMetaDataHitRatio(); - return chunkMetaDataHitRatio; + return ChunkMetadataCache.getInstance().calculateChunkMetaDataHitRatio(); + } + + @Override + public long getChunkMetaDataCacheUsedMemory() { + return ChunkMetadataCache.getInstance().getUsedMemory(); + } + + @Override + public long getChunkMetaDataCacheMaxMemory() { + return ChunkMetadataCache.getInstance().getMaxMemory(); + } + + @Override + public double getChunkMetaDataCacheUsedMemoryProportion() { + return ChunkMetadataCache.getInstance().getUsedMemoryProportion(); + } + + @Override + public long getChunkMetaDataCacheAverageSize() { + return ChunkMetadataCache.getInstance().getAverageSize(); } @Override @@ -66,10 +83,50 @@ public class CacheHitRatioMonitor implements CacheHitRatioMonitorMXBean, IServic } @Override + public long getChunkCacheUsedMemory() { + return ChunkCache.getInstance().getUsedMemory(); + } + + @Override + public long getChunkCacheMaxMemory() { + return ChunkCache.getInstance().getMaxMemory(); + } + + @Override + public double getChunkCacheUsedMemoryProportion() { + return ChunkCache.getInstance().getUsedMemoryProportion(); + } + + @Override + public long getChunkCacheAverageSize() { + return ChunkCache.getInstance().getAverageSize(); + } + + @Override public double getTimeSeriesMetadataHitRatio() { return TimeSeriesMetadataCache.getInstance().calculateTimeSeriesMetadataHitRatio(); } + @Override + public long getTimeSeriesMetadataCacheUsedMemory() { + return TimeSeriesMetadataCache.getInstance().getUsedMemory(); + } + + @Override + public long getTimeSeriesMetadataCacheMaxMemory() { + return TimeSeriesMetadataCache.getInstance().getMaxMemory(); + } + + @Override + public double getTimeSeriesCacheUsedMemoryProportion() { + return TimeSeriesMetadataCache.getInstance().getUsedMemoryProportion(); + } + + @Override + public long getTimeSeriesMetaDataCacheAverageSize() { + return TimeSeriesMetadataCache.getInstance().getAverageSize(); + } + public static CacheHitRatioMonitor getInstance() { return instance; } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitorMXBean.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitorMXBean.java index 644374d..0514481 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitorMXBean.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/CacheHitRatioMonitorMXBean.java @@ -22,7 +22,34 @@ public interface CacheHitRatioMonitorMXBean { double getChunkMetaDataHitRatio(); + long getChunkMetaDataCacheUsedMemory(); + + long getChunkMetaDataCacheMaxMemory(); + + double getChunkMetaDataCacheUsedMemoryProportion(); + + long getChunkMetaDataCacheAverageSize(); + + double getChunkHitRatio(); + long getChunkCacheUsedMemory(); + + long getChunkCacheMaxMemory(); + + double getChunkCacheUsedMemoryProportion(); + + long getChunkCacheAverageSize(); + + double getTimeSeriesMetadataHitRatio(); + + long getTimeSeriesMetadataCacheUsedMemory(); + + long getTimeSeriesMetadataCacheMaxMemory(); + + double getTimeSeriesCacheUsedMemoryProportion(); + + long getTimeSeriesMetaDataCacheAverageSize(); + } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java index 7001f34..bd09dec 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkCache.java @@ -56,9 +56,6 @@ public class ChunkCache { logger.info("ChunkCache size = " + MEMORY_THRESHOLD_IN_CHUNK_CACHE); lruCache = new LRULinkedHashMap<ChunkMetadata, Chunk>(MEMORY_THRESHOLD_IN_CHUNK_CACHE, true) { - int count = 0; - long averageSize = 0; - @Override protected long calEntrySize(ChunkMetadata key, Chunk value) { if (count < 10) { @@ -147,6 +144,22 @@ public class ChunkCache { } } + public long getUsedMemory() { + return lruCache.getUsedMemory(); + } + + public long getMaxMemory() { + return lruCache.getMaxMemory(); + } + + public double getUsedMemoryProportion() { + return lruCache.getUsedMemoryProportion(); + } + + public long getAverageSize() { + return lruCache.getAverageSize(); + } + /** * clear LRUCache. diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java index b955f31..421f62b 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/ChunkMetadataCache.java @@ -64,29 +64,25 @@ public class ChunkMetadataCache { private ChunkMetadataCache(long memoryThreshold) { logger.info("ChunkMetadataCache size = " + memoryThreshold); lruCache = new LRULinkedHashMap<String, List<ChunkMetadata>>(memoryThreshold, true) { - int count = 0; - long averageChunkMetadataSize = 0; - @Override protected long calEntrySize(String key, List<ChunkMetadata> value) { if (value.isEmpty()) { - return key.getBytes().length + averageChunkMetadataSize * value.size(); + return key.getBytes().length + averageSize * value.size(); } - if (count < 10) { long currentSize = RamUsageEstimator.shallowSizeOf(value.get(0)) + RamUsageEstimator .shallowSizeOf(value.get(0).getStatistics()); - averageChunkMetadataSize = ((averageChunkMetadataSize * count) + currentSize) / (++count); - IoTDBConfigDynamicAdapter.setChunkMetadataSizeInByte(averageChunkMetadataSize); + averageSize = ((averageSize * count) + currentSize) / (++count); + IoTDBConfigDynamicAdapter.setChunkMetadataSizeInByte(averageSize); return key.getBytes().length + currentSize * value.size(); } else if (count < 100000) { count++; - return key.getBytes().length + averageChunkMetadataSize * value.size(); + return key.getBytes().length + averageSize * value.size(); } else { - averageChunkMetadataSize = RamUsageEstimator.shallowSizeOf(value.get(0)) + RamUsageEstimator + averageSize = RamUsageEstimator.shallowSizeOf(value.get(0)) + RamUsageEstimator .shallowSizeOf(value.get(0).getStatistics()); count = 1; - return key.getBytes().length + averageChunkMetadataSize * value.size(); + return key.getBytes().length + averageSize * value.size(); } } }; @@ -174,6 +170,22 @@ public class ChunkMetadataCache { } } + public long getUsedMemory() { + return lruCache.getUsedMemory(); + } + + public long getMaxMemory() { + return lruCache.getMaxMemory(); + } + + public double getUsedMemoryProportion() { + return lruCache.getUsedMemoryProportion(); + } + + public long getAverageSize() { + return lruCache.getAverageSize(); + } + /** * clear LRUCache. */ diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java index c85d147..8172588 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/LRULinkedHashMap.java @@ -33,21 +33,24 @@ public abstract class LRULinkedHashMap<K, V> extends LinkedHashMap<K, V> { /** * maximum memory threshold. */ - private long maxMemInB; + private long maxMemory; /** * current used memory. */ - private long usedMemInB; + private long usedMemory; - public LRULinkedHashMap(long maxMemInB, boolean isLru) { + protected int count = 0; + protected long averageSize = 0; + + public LRULinkedHashMap(long maxMemory, boolean isLru) { super(INITIAL_CAPACITY, LOAD_FACTOR_MAP, isLru); - this.maxMemInB = maxMemInB; + this.maxMemory = maxMemory; } @Override protected boolean removeEldestEntry(Map.Entry<K, V> eldest) { - if (usedMemInB > maxMemInB) { - usedMemInB -= calEntrySize(eldest.getKey(), eldest.getValue()); + if (usedMemory > maxMemory) { + usedMemory -= calEntrySize(eldest.getKey(), eldest.getValue()); return true; } else { return false; @@ -56,7 +59,7 @@ public abstract class LRULinkedHashMap<K, V> extends LinkedHashMap<K, V> { @Override public V put(K key, V value) { - usedMemInB += calEntrySize(key, value); + usedMemory += calEntrySize(key, value); return super.put(key, value); } @@ -69,7 +72,19 @@ public abstract class LRULinkedHashMap<K, V> extends LinkedHashMap<K, V> { * calculate the proportion of used memory. */ public double getUsedMemoryProportion() { - return usedMemInB * 1.0 / maxMemInB; + return usedMemory * 1.0 / maxMemory; + } + + public long getUsedMemory() { + return usedMemory; + } + + public long getMaxMemory() { + return maxMemory; + } + + public long getAverageSize() { + return averageSize; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java index ccd430f..22a29e8 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/cache/TimeSeriesMetadataCache.java @@ -61,8 +61,6 @@ public class TimeSeriesMetadataCache { logger.info("TimeseriesMetadataCache size = " + MEMORY_THRESHOLD_IN_TIME_SERIES_METADATA_CACHE); lruCache = new LRULinkedHashMap<TimeSeriesMetadataCacheKey, TimeseriesMetadata>( MEMORY_THRESHOLD_IN_TIME_SERIES_METADATA_CACHE, true) { - int count = 0; - long averageSize = 0; @Override protected long calEntrySize(TimeSeriesMetadataCacheKey key, TimeseriesMetadata value) { @@ -162,6 +160,21 @@ public class TimeSeriesMetadataCache { } } + public long getUsedMemory() { + return lruCache.getUsedMemory(); + } + + public long getMaxMemory() { + return lruCache.getMaxMemory(); + } + + public double getUsedMemoryProportion() { + return lruCache.getUsedMemoryProportion(); + } + + public long getAverageSize() { + return lruCache.getAverageSize(); + } /** * clear LRUCache.
