Repository: ignite Updated Branches: refs/heads/ignite-5072 [created] 9125b904a
IGNITE-5072 - Return memory metrics snapshot on public API Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9125b904 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9125b904 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9125b904 Branch: refs/heads/ignite-5072 Commit: 9125b904a0fa253231374b0a9002de40e25f7ce3 Parents: 1dc9e69 Author: Alexey Goncharuk <[email protected]> Authored: Tue Apr 25 12:21:42 2017 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Tue Apr 25 12:21:42 2017 +0300 ---------------------------------------------------------------------- .../src/main/java/org/apache/ignite/Ignite.java | 1 - .../java/org/apache/ignite/MemoryMetrics.java | 34 +----- .../MemoryPolicyConfiguration.java | 37 +++++++ .../apache/ignite/internal/IgniteKernal.java | 9 +- .../IgniteCacheDatabaseSharedManager.java | 37 +++++-- .../cache/database/MemoryMetricsImpl.java | 6 +- .../cache/database/MemoryMetricsSnapshot.java | 103 +++++++++++++++++++ .../processors/cache/database/MemoryPolicy.java | 7 +- .../ignite/mxbean/MemoryMetricsMXBean.java | 56 ++++++---- .../internal/ClusterNodeMetricsSelfTest.java | 6 +- 10 files changed, 224 insertions(+), 72 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/main/java/org/apache/ignite/Ignite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/Ignite.java b/modules/core/src/main/java/org/apache/ignite/Ignite.java index d8addcd..5ad930f 100644 --- a/modules/core/src/main/java/org/apache/ignite/Ignite.java +++ b/modules/core/src/main/java/org/apache/ignite/Ignite.java @@ -615,7 +615,6 @@ public interface Ignite extends AutoCloseable { */ public void resetLostPartitions(Collection<String> cacheNames); - /** * Returns collection {@link MemoryMetrics} objects providing information about memory usage in current Ignite instance. * http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/main/java/org/apache/ignite/MemoryMetrics.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/MemoryMetrics.java b/modules/core/src/main/java/org/apache/ignite/MemoryMetrics.java index b4097d1..41b07d7 100644 --- a/modules/core/src/main/java/org/apache/ignite/MemoryMetrics.java +++ b/modules/core/src/main/java/org/apache/ignite/MemoryMetrics.java @@ -27,9 +27,9 @@ public interface MemoryMetrics { public String getName(); /** - * @return Returns size (in MBytes) of MemoryPolicy observed by this MemoryMetrics MBean. + * @return Returns size (in bytes) of MemoryPolicy represented by this MemoryMetrics MBean. */ - public int getSize(); + public long getSize(); /** * @return Path of memory-mapped file used to swap PageMemory pages to disk. @@ -37,16 +37,6 @@ public interface MemoryMetrics { public String getSwapFilePath(); /** - * Enables collecting memory metrics. - */ - public void enableMetrics(); - - /** - * Disables collecting memory metrics. - */ - public void disableMetrics(); - - /** * @return Total number of allocated pages. */ public long getTotalAllocatedPages(); @@ -72,24 +62,4 @@ public interface MemoryMetrics { * @return Free space to overall size ratio across all pages in FreeList. */ public float getPagesFillFactor(); - - /** - * Sets interval of time (in seconds) to monitor allocation rate. - * - * E.g. after setting rateTimeInterval to 60 seconds subsequent calls to {@link #getAllocationRate()} - * will return average allocation rate (pages per second) for the last minute. - * - * @param rateTimeInterval Time interval used to calculate allocation/eviction rate. - */ - public void rateTimeInterval(int rateTimeInterval); - - /** - * Sets number of subintervals the whole rateTimeInterval will be split into to calculate allocation rate, - * 5 by default. - * Setting it to bigger number allows more precise calculation and smaller drops of allocationRate metric - * when next subinterval has to be recycled but introduces bigger calculation overhead. - * - * @param subInts Number of subintervals. - */ - public void subIntervals(int subInts); } http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java index d0adcf9..7d12b27 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java @@ -62,6 +62,9 @@ public final class MemoryPolicyConfiguration implements Serializable { /** */ private static final long serialVersionUID = 0L; + /** Default metrics enabled flag. */ + public static final boolean DFLT_METRICS_ENABLED = false; + /** Memory policy name. */ private String name = DFLT_MEM_PLC_DEFAULT_NAME; @@ -83,6 +86,9 @@ public final class MemoryPolicyConfiguration implements Serializable { /** Minimum number of empty pages in reuse lists. */ private int emptyPagesPoolSize = 100; + /** */ + private boolean metricsEnabled = DFLT_METRICS_ENABLED; + /** * Gets memory policy name. * @@ -98,6 +104,7 @@ public final class MemoryPolicyConfiguration implements Serializable { * If not specified, {@link MemoryConfiguration#DFLT_MEM_PLC_DEFAULT_NAME} value is used. * * @param name Memory policy name. + * @return {@code this} for chaining. */ public MemoryPolicyConfiguration setName(String name) { this.name = name; @@ -118,6 +125,9 @@ public final class MemoryPolicyConfiguration implements Serializable { /** * Sets maximum memory region size defined by this memory policy. The total size should not be less than 10 MB * due to the internal data structures overhead. + * + * @param size Maximum memory region size in bytes. + * @return {@code this} for chaining. */ public MemoryPolicyConfiguration setSize(long size) { this.size = size; @@ -140,6 +150,7 @@ public final class MemoryPolicyConfiguration implements Serializable { * Sets a path to the memory-mapped file. * * @param swapFilePath A Path to the memory mapped file. + * @return {@code this} for chaining. */ public MemoryPolicyConfiguration setSwapFilePath(String swapFilePath) { this.swapFilePath = swapFilePath; @@ -162,6 +173,7 @@ public final class MemoryPolicyConfiguration implements Serializable { * Sets memory pages eviction mode. * * @param evictionMode Eviction mode. + * @return {@code this} for chaining. */ public MemoryPolicyConfiguration setPageEvictionMode(DataPageEvictionMode evictionMode) { pageEvictionMode = evictionMode; @@ -183,6 +195,7 @@ public final class MemoryPolicyConfiguration implements Serializable { * Sets memory pages eviction threshold. * * @param evictionThreshold Eviction threshold. + * @return {@code this} for chaining. */ public MemoryPolicyConfiguration setEvictionThreshold(double evictionThreshold) { this.evictionThreshold = evictionThreshold; @@ -213,10 +226,34 @@ public final class MemoryPolicyConfiguration implements Serializable { * Increase this parameter if {@link IgniteOutOfMemoryException} occurred with enabled page eviction. * * @param emptyPagesPoolSize Empty pages pool size. + * @return {@code this} for chaining. */ public MemoryPolicyConfiguration setEmptyPagesPoolSize(int emptyPagesPoolSize) { this.emptyPagesPoolSize = emptyPagesPoolSize; return this; } + + /** + * Gets whether memory metrics are enabled by default on node startup. Memory metrics can be enabled and disabled + * at runtime via memory metrics MX bean. + * + * @return Metrics enabled flag. + */ + public boolean isMetricsEnabled() { + return metricsEnabled; + } + + /** + * Sets memory metrics enabled flag. If this flag is {@code true}, metrics will be enabled on node startup. + * Memory metrics can be enabled and disabled at runtime via memory metrics MX bean. + * + * @param metricsEnabled Metrics enanabled flag. + * @return {@code this} for chaining. + */ + public MemoryPolicyConfiguration setMetricsEnabled(boolean metricsEnabled) { + this.metricsEnabled = metricsEnabled; + + return this; + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index 12a7af6..e828914 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -3393,7 +3393,14 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { /** {@inheritDoc} */ @Override public Collection<MemoryMetrics> memoryMetrics() { - return ctx.cache().context().database().memoryMetrics(); + guard(); + + try { + return ctx.cache().context().database().memoryMetrics(); + } + finally { + unguard(); + } } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java index ae594fa..2fa8d99 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java @@ -18,7 +18,9 @@ package org.apache.ignite.internal.processors.cache.database; import java.io.File; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -28,8 +30,8 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.MemoryMetrics; import org.apache.ignite.cluster.ClusterNode; -import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.configuration.DataPageEvictionMode; +import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.configuration.MemoryConfiguration; import org.apache.ignite.configuration.MemoryPolicyConfiguration; import org.apache.ignite.internal.GridKernalContext; @@ -38,8 +40,8 @@ import org.apache.ignite.internal.mem.DirectMemoryProvider; import org.apache.ignite.internal.mem.file.MappedFileMemoryProvider; import org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider; import org.apache.ignite.internal.pagemem.PageMemory; -import org.apache.ignite.internal.pagemem.snapshot.StartFullSnapshotAckDiscoveryMessage; import org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl; +import org.apache.ignite.internal.pagemem.snapshot.StartFullSnapshotAckDiscoveryMessage; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheMapEntry; import org.apache.ignite.internal.processors.cache.GridCacheSharedManagerAdapter; @@ -52,8 +54,9 @@ import org.apache.ignite.internal.processors.cache.database.freelist.FreeList; import org.apache.ignite.internal.processors.cache.database.freelist.FreeListImpl; import org.apache.ignite.internal.processors.cache.database.tree.reuse.ReuseList; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupport; +import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.mxbean.MemoryMetricsMXBean; import org.jetbrains.annotations.Nullable; @@ -126,13 +129,13 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap IgniteConfiguration cfg = cctx.gridConfig(); for (MemoryMetrics memMetrics : memMetricsMap.values()) - registerMetricsMBean((MemoryMetricsImpl) memMetrics, cfg); + registerMetricsMBean((MemoryMetricsMXBean)memMetrics, cfg); } /** * @param memMetrics Memory metrics. */ - private void registerMetricsMBean(MemoryMetricsImpl memMetrics, IgniteConfiguration cfg) { + private void registerMetricsMBean(MemoryMetricsMXBean memMetrics, IgniteConfiguration cfg) { try { U.registerMBean( cfg.getMBeanServer(), @@ -143,7 +146,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap MemoryMetricsMXBean.class); } catch (JMException e) { - log.warning("Failed to register MBean for MemoryMetrics with name: '" + memMetrics.getName() + "'"); + U.error(log, "Failed to register MBean for MemoryMetrics with name: '" + memMetrics.getName() + "'", e); } } @@ -330,7 +333,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap * @param plcNames All MemoryPolicy names. * @throws IgniteCheckedException In case of validation violation. */ - private static void checkDefaultPolicyConfiguration(String dfltPlcName, Set<String> plcNames) throws IgniteCheckedException { + private static void checkDefaultPolicyConfiguration(String dfltPlcName, Collection<String> plcNames) throws IgniteCheckedException { if (!DFLT_MEM_PLC_DEFAULT_NAME.equals(dfltPlcName)) { if (dfltPlcName.isEmpty()) throw new IgniteCheckedException("User-defined default MemoryPolicy name must be non-empty"); @@ -379,7 +382,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap * @param observedNames Names of MemoryPolicies observed before. * @throws IgniteCheckedException If config is invalid. */ - private static void checkPolicyName(String plcName, Set<String> observedNames) throws IgniteCheckedException { + private static void checkPolicyName(String plcName, Collection<String> observedNames) throws IgniteCheckedException { if (plcName == null || plcName.isEmpty()) throw new IgniteCheckedException("User-defined MemoryPolicyConfiguration must have non-null and non-empty name."); @@ -420,7 +423,17 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap * @return MemoryMetrics for all MemoryPolicies configured in Ignite instance. */ public Collection<MemoryMetrics> memoryMetrics() { - return memMetricsMap != null ? memMetricsMap.values() : null; + if (!F.isEmpty(memMetricsMap)) { + // Intentionally return a collection copy to make it explicitly serializable. + Collection<MemoryMetrics> res = new ArrayList<>(memMetricsMap.size()); + + for (MemoryMetrics metrics : memMetricsMap.values()) + res.add(new MemoryMetricsSnapshot(metrics)); + + return res; + } + else + return Collections.emptyList(); } /** @@ -619,7 +632,11 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap * @param memMetrics {@link MemoryMetrics} object to collect memory usage metrics. * @return Memory policy instance. */ - private MemoryPolicy initMemory(MemoryConfiguration dbCfg, MemoryPolicyConfiguration plc, MemoryMetricsImpl memMetrics) { + private MemoryPolicy initMemory( + MemoryConfiguration dbCfg, + MemoryPolicyConfiguration plc, + MemoryMetricsImpl memMetrics + ) { long[] sizes = calculateFragmentSizes( dbCfg.getConcurrencyLevel(), plc.getSize()); http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java index ed4cae0..47d018a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsImpl.java @@ -68,6 +68,8 @@ public class MemoryMetricsImpl implements MemoryMetricsMXBean { public MemoryMetricsImpl(MemoryPolicyConfiguration memPlcCfg) { this.memPlcCfg = memPlcCfg; + metricsEnabled = memPlcCfg.isMetricsEnabled(); + for (int i = 0; i < subInts; i++) allocRateCounters[i] = new LongAdder8(); } @@ -78,8 +80,8 @@ public class MemoryMetricsImpl implements MemoryMetricsMXBean { } /** {@inheritDoc} */ - @Override public int getSize() { - return (int) (memPlcCfg.getSize() / (1024 * 1024)); + @Override public long getSize() { + return memPlcCfg.getSize(); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsSnapshot.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsSnapshot.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsSnapshot.java new file mode 100644 index 0000000..9205ae6 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryMetricsSnapshot.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal.processors.cache.database; + +import org.apache.ignite.MemoryMetrics; + +/** + * + */ +public class MemoryMetricsSnapshot implements MemoryMetrics { + /** */ + private String name; + + /** */ + private long size; + + /** */ + private String swapFilePath; + + /** */ + private long totalAllocatedPages; + + /** */ + private float allocationRate; + + /** */ + private float evictionRate; + + /** */ + private float largeEntriesPagesPercentage; + + /** */ + private float pagesFillFactor; + + /** + * @param metrics Metrics instance to take a copy. + */ + public MemoryMetricsSnapshot(MemoryMetrics metrics) { + name = metrics.getName(); + size = metrics.getSize(); + swapFilePath = metrics.getSwapFilePath(); + totalAllocatedPages = metrics.getTotalAllocatedPages(); + allocationRate = metrics.getAllocationRate(); + evictionRate = metrics.getEvictionRate(); + largeEntriesPagesPercentage = metrics.getLargeEntriesPagesPercentage(); + pagesFillFactor = metrics.getPagesFillFactor(); + } + + /** {@inheritDoc} */ + @Override public String getName() { + return name; + } + + /** {@inheritDoc} */ + @Override public long getSize() { + return size; + } + + /** {@inheritDoc} */ + @Override public String getSwapFilePath() { + return swapFilePath; + } + + /** {@inheritDoc} */ + @Override public long getTotalAllocatedPages() { + return totalAllocatedPages; + } + + /** {@inheritDoc} */ + @Override public float getAllocationRate() { + return allocationRate; + } + + /** {@inheritDoc} */ + @Override public float getEvictionRate() { + return evictionRate; + } + + /** {@inheritDoc} */ + @Override public float getLargeEntriesPagesPercentage() { + return largeEntriesPagesPercentage; + } + + /** {@inheritDoc} */ + @Override public float getPagesFillFactor() { + return pagesFillFactor; + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryPolicy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryPolicy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryPolicy.java index 90e5ac1..cb35d33 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryPolicy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MemoryPolicy.java @@ -16,7 +16,6 @@ */ package org.apache.ignite.internal.processors.cache.database; -import org.apache.ignite.MemoryMetrics; import org.apache.ignite.configuration.MemoryPolicyConfiguration; import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.evict.PageEvictionTracker; @@ -29,7 +28,7 @@ public class MemoryPolicy { private final PageMemory pageMem; /** */ - private final MemoryMetrics memMetrics; + private final MemoryMetricsImpl memMetrics; /** */ private final MemoryPolicyConfiguration cfg; @@ -46,7 +45,7 @@ public class MemoryPolicy { public MemoryPolicy( PageMemory pageMem, MemoryPolicyConfiguration cfg, - MemoryMetrics memMetrics, + MemoryMetricsImpl memMetrics, PageEvictionTracker evictionTracker) { this.pageMem = pageMem; this.memMetrics = memMetrics; @@ -71,7 +70,7 @@ public class MemoryPolicy { /** * @return Memory Metrics. */ - public MemoryMetrics memoryMetrics() { + public MemoryMetricsImpl memoryMetrics() { return memMetrics; } http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/main/java/org/apache/ignite/mxbean/MemoryMetricsMXBean.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/MemoryMetricsMXBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/MemoryMetricsMXBean.java index db75f57..2f3ca7c 100644 --- a/modules/core/src/main/java/org/apache/ignite/mxbean/MemoryMetricsMXBean.java +++ b/modules/core/src/main/java/org/apache/ignite/mxbean/MemoryMetricsMXBean.java @@ -29,21 +29,13 @@ public interface MemoryMetricsMXBean extends MemoryMetrics { /** {@inheritDoc} */ @MXBeanDescription("Size of PageMemory in MBytes.") - @Override public int getSize(); + @Override public long getSize(); /** {@inheritDoc} */ @MXBeanDescription("File path of memory-mapped swap file.") @Override public String getSwapFilePath(); /** {@inheritDoc} */ - @MXBeanDescription("Enables metrics gathering.") - @Override public void enableMetrics(); - - /** {@inheritDoc} */ - @MXBeanDescription("Disables metrics gathering.") - @Override public void disableMetrics(); - - /** {@inheritDoc} */ @MXBeanDescription("Total number of allocated pages.") @Override public long getTotalAllocatedPages(); @@ -63,27 +55,53 @@ public interface MemoryMetricsMXBean extends MemoryMetrics { @MXBeanDescription("Pages fill factor: size of all entries in cache over size of all allocated pages.") @Override public float getPagesFillFactor(); - /** {@inheritDoc} */ + /** + * Enables collecting memory metrics. + */ + @MXBeanDescription("Enables metrics gathering.") + public void enableMetrics(); + + /** + * Disables collecting memory metrics. + */ + @MXBeanDescription("Disables metrics gathering.") + public void disableMetrics(); + + /** + * Sets interval of time (in seconds) to monitor allocation rate. + * + * E.g. after setting rateTimeInterval to 60 seconds subsequent calls to {@link #getAllocationRate()} + * will return average allocation rate (pages per second) for the last minute. + * + * @param rateTimeInterval Time interval used to calculate allocation/eviction rate. + */ @MXBeanDescription( - "Sets time interval average allocation rate (pages per second) is calculated over." + "Sets time interval average allocation rate (pages per second) is calculated over." ) @MXBeanParametersNames( - "rateTimeInterval" + "rateTimeInterval" ) @MXBeanParametersDescriptions( - "Time interval (in seconds) to set." + "Time interval (in seconds) to set." ) - @Override public void rateTimeInterval(int rateTimeInterval); + public void rateTimeInterval(int rateTimeInterval); - /** {@inheritDoc} */ + /** + * Sets number of subintervals the whole rateTimeInterval will be split into to calculate allocation rate, + * 5 by default. + * Setting it to bigger number allows more precise calculation and smaller drops of allocationRate metric + * when next subinterval has to be recycled but introduces bigger calculation overhead. + * + * @param subInts Number of subintervals. + */ @MXBeanDescription( - "Sets number of subintervals to calculate allocationRate metrics." + "Sets number of subintervals to calculate allocationRate metrics." ) @MXBeanParametersNames( - "subInts" + "subInts" ) @MXBeanParametersDescriptions( - "Number of subintervals to set." + "Number of subintervals to set." ) - @Override public void subIntervals(int subInts); + public void subIntervals(int subInts); } http://git-wip-us.apache.org/repos/asf/ignite/blob/9125b904/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java index dafc41f..b447e31 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/ClusterNodeMetricsSelfTest.java @@ -24,12 +24,12 @@ import org.apache.ignite.GridTestTask; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.IgniteCheckedException; -import org.apache.ignite.MemoryMetrics; import org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicy; import org.apache.ignite.cluster.ClusterMetrics; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.events.Event; +import org.apache.ignite.internal.processors.cache.database.MemoryMetricsImpl; import org.apache.ignite.internal.processors.task.GridInternal; import org.apache.ignite.internal.util.lang.GridAbsPredicate; import org.apache.ignite.lang.IgnitePredicate; @@ -111,7 +111,7 @@ public class ClusterNodeMetricsSelfTest extends GridCommonAbstractTest { final IgniteCache cache = ignite.getOrCreateCache(CACHE_NAME); - MemoryMetrics memMetrics = getDefaultMemoryPolicyMetrics(ignite); + MemoryMetricsImpl memMetrics = getDefaultMemoryPolicyMetrics(ignite); memMetrics.enableMetrics(); @@ -128,7 +128,7 @@ public class ClusterNodeMetricsSelfTest extends GridCommonAbstractTest { /** * @param ignite Ignite instance. */ - private MemoryMetrics getDefaultMemoryPolicyMetrics(IgniteEx ignite) throws IgniteCheckedException { + private MemoryMetricsImpl getDefaultMemoryPolicyMetrics(IgniteEx ignite) throws IgniteCheckedException { return ignite.context().cache().context().database().memoryPolicy(null).memoryMetrics(); }
