YARN-9642. Fix Memory Leak in AbstractYarnScheduler caused by timer. Contributed by Bibin A Chundatt.
This commit is contained in:
parent
6d7f01c92d
commit
d3ce53e507
|
@ -148,6 +148,7 @@ public abstract class AbstractYarnScheduler
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
Thread updateThread;
|
Thread updateThread;
|
||||||
private final Object updateThreadMonitor = new Object();
|
private final Object updateThreadMonitor = new Object();
|
||||||
|
private Timer releaseCache;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* All schedulers which are inheriting AbstractYarnScheduler should use
|
* All schedulers which are inheriting AbstractYarnScheduler should use
|
||||||
|
@ -208,7 +209,7 @@ public abstract class AbstractYarnScheduler
|
||||||
nodeTracker.setConfiguredMaxAllocationWaitTime(
|
nodeTracker.setConfiguredMaxAllocationWaitTime(
|
||||||
configuredMaximumAllocationWaitTime);
|
configuredMaximumAllocationWaitTime);
|
||||||
maxClusterLevelAppPriority = getMaxPriorityFromConf(conf);
|
maxClusterLevelAppPriority = getMaxPriorityFromConf(conf);
|
||||||
createReleaseCache();
|
this.releaseCache = new Timer("Pending Container Clear Timer");
|
||||||
autoUpdateContainers =
|
autoUpdateContainers =
|
||||||
conf.getBoolean(YarnConfiguration.RM_AUTO_UPDATE_CONTAINERS,
|
conf.getBoolean(YarnConfiguration.RM_AUTO_UPDATE_CONTAINERS,
|
||||||
YarnConfiguration.DEFAULT_RM_AUTO_UPDATE_CONTAINERS);
|
YarnConfiguration.DEFAULT_RM_AUTO_UPDATE_CONTAINERS);
|
||||||
|
@ -230,6 +231,7 @@ public abstract class AbstractYarnScheduler
|
||||||
updateThread.start();
|
updateThread.start();
|
||||||
}
|
}
|
||||||
schedulingMonitorManager.startAll();
|
schedulingMonitorManager.startAll();
|
||||||
|
createReleaseCache();
|
||||||
super.serviceStart();
|
super.serviceStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,6 +241,12 @@ public abstract class AbstractYarnScheduler
|
||||||
updateThread.interrupt();
|
updateThread.interrupt();
|
||||||
updateThread.join(THREAD_JOIN_TIMEOUT_MS);
|
updateThread.join(THREAD_JOIN_TIMEOUT_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Stop Timer
|
||||||
|
if (releaseCache != null) {
|
||||||
|
releaseCache.cancel();
|
||||||
|
releaseCache = null;
|
||||||
|
}
|
||||||
schedulingMonitorManager.stop();
|
schedulingMonitorManager.stop();
|
||||||
super.serviceStop();
|
super.serviceStop();
|
||||||
}
|
}
|
||||||
|
@ -635,7 +643,7 @@ public abstract class AbstractYarnScheduler
|
||||||
|
|
||||||
protected void createReleaseCache() {
|
protected void createReleaseCache() {
|
||||||
// Cleanup the cache after nm expire interval.
|
// Cleanup the cache after nm expire interval.
|
||||||
new Timer().schedule(new TimerTask() {
|
releaseCache.schedule(new TimerTask() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
clearPendingContainerCache();
|
clearPendingContainerCache();
|
||||||
|
|
Loading…
Reference in New Issue