Allow adjusting of lead detection sampling interval. (#8568)

Motivation:

We should allow adjustment of the leak detecting sampling interval when in SAMPLE mode.

Modifications:

Added new int property io.netty.leakDetection.samplingInterval

Result:

Be able to consume changes made by the user.
This commit is contained in:
Jake Luciani 2018-11-16 11:22:03 -05:00 committed by Norman Maurer
parent abc8a08c96
commit 63dc1f5aaa
2 changed files with 8 additions and 5 deletions

View File

@ -48,7 +48,12 @@ public class ResourceLeakDetector<T> {
private static final String PROP_TARGET_RECORDS = "io.netty.leakDetection.targetRecords"; private static final String PROP_TARGET_RECORDS = "io.netty.leakDetection.targetRecords";
private static final int DEFAULT_TARGET_RECORDS = 4; private static final int DEFAULT_TARGET_RECORDS = 4;
private static final String PROP_SAMPLING_INTERVAL = "io.netty.leakDetection.samplingInterval";
// There is a minor performance benefit in TLR if this is a power of 2.
private static final int DEFAULT_SAMPLING_INTERVAL = 128;
private static final int TARGET_RECORDS; private static final int TARGET_RECORDS;
static final int SAMPLING_INTERVAL;
/** /**
* Represents the level of resource leak detection. * Represents the level of resource leak detection.
@ -117,6 +122,7 @@ public class ResourceLeakDetector<T> {
Level level = Level.parseLevel(levelStr); Level level = Level.parseLevel(levelStr);
TARGET_RECORDS = SystemPropertyUtil.getInt(PROP_TARGET_RECORDS, DEFAULT_TARGET_RECORDS); TARGET_RECORDS = SystemPropertyUtil.getInt(PROP_TARGET_RECORDS, DEFAULT_TARGET_RECORDS);
SAMPLING_INTERVAL = SystemPropertyUtil.getInt(PROP_SAMPLING_INTERVAL, DEFAULT_SAMPLING_INTERVAL);
ResourceLeakDetector.level = level; ResourceLeakDetector.level = level;
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
@ -125,9 +131,6 @@ public class ResourceLeakDetector<T> {
} }
} }
// There is a minor performance benefit in TLR if this is a power of 2.
static final int DEFAULT_SAMPLING_INTERVAL = 128;
/** /**
* @deprecated Use {@link #setLevel(Level)} instead. * @deprecated Use {@link #setLevel(Level)} instead.
*/ */

View File

@ -62,7 +62,7 @@ public abstract class ResourceLeakDetectorFactory {
* @return a new instance of {@link ResourceLeakDetector} * @return a new instance of {@link ResourceLeakDetector}
*/ */
public final <T> ResourceLeakDetector<T> newResourceLeakDetector(Class<T> resource) { public final <T> ResourceLeakDetector<T> newResourceLeakDetector(Class<T> resource) {
return newResourceLeakDetector(resource, ResourceLeakDetector.DEFAULT_SAMPLING_INTERVAL); return newResourceLeakDetector(resource, ResourceLeakDetector.SAMPLING_INTERVAL);
} }
/** /**
@ -90,7 +90,7 @@ public abstract class ResourceLeakDetectorFactory {
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public <T> ResourceLeakDetector<T> newResourceLeakDetector(Class<T> resource, int samplingInterval) { public <T> ResourceLeakDetector<T> newResourceLeakDetector(Class<T> resource, int samplingInterval) {
return newResourceLeakDetector(resource, ResourceLeakDetector.DEFAULT_SAMPLING_INTERVAL, Long.MAX_VALUE); return newResourceLeakDetector(resource, ResourceLeakDetector.SAMPLING_INTERVAL, Long.MAX_VALUE);
} }
/** /**