[ 
https://issues.apache.org/jira/browse/YARN-11139?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated YARN-11139:
----------------------------------
    Labels: pull-request-available  (was: )

> Minor performance improvements in DelegationTokenRenewerPoolTracker
> -------------------------------------------------------------------
>
>                 Key: YARN-11139
>                 URL: https://issues.apache.org/jira/browse/YARN-11139
>             Project: Hadoop YARN
>          Issue Type: Improvement
>          Components: resourcemanager
>    Affects Versions: 3.3.1, 3.3.3
>         Environment: Hadoop3.3.1 with Kerberos
>            Reporter: YulongZ
>            Priority: Minor
>              Labels: pull-request-available
>         Attachments: CPU cost of ResourceManager with no sleep time.png, CPU 
> cost of ResourceManager with sleep 1.png, Flame diagram of ResourceManager 
> with no sleep time.svg, Flame diagram of ResourceManager with sleep 1.svg
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> The DelegationTokenRenewerPoolTracker thread wastes of CPU resources when no 
> application running,the run method always executes a for loop, but actually 
> does nothing. 
> {code:java}
> // code with no change
> @Override
>     public void run() {
>       while (true) {
>         for (Map.Entry<DelegationTokenRenewerEvent, Future<?>> entry : futures
>             .entrySet()) {
>           DelegationTokenRenewerEvent evt = entry.getKey();
>           Future<?> future = entry.getValue();
>           try {
>             future.get(tokenRenewerThreadTimeout, TimeUnit.MILLISECONDS);
>           } catch (TimeoutException e) {
>             // Cancel thread and retry the same event in case of timeout
>             if (future != null && !future.isDone() && !future.isCancelled()) {
>               future.cancel(true);
>               futures.remove(evt);
>               if (evt.getAttempt() < tokenRenewerThreadRetryMaxAttempts) {
>                 renewalTimer.schedule(
>                     getTimerTask((AbstractDelegationTokenRenewerAppEvent) 
> evt),
>                     tokenRenewerThreadRetryInterval);
>               } else {
>                 LOG.info(
>                     "Exhausted max retry attempts {} in token renewer "
>                         + "thread for {}",
>                     tokenRenewerThreadRetryMaxAttempts, 
> evt.getApplicationId());
>               }
>             }
>           } catch (Exception e) {
>             LOG.info("Problem in submitting renew tasks in token renewer "
>                 + "thread.", e);
>           }
>         }
>       }
>     }
> {code}
> Maybe we can add a tiny sleep to avoid waste of CPU resources. For example 
> below,
> {code:java}
> // code with a tiny sleep
>     public void run() {
>       while (true) {
>         try {
>           Thread.sleep(1);
>         } catch (InterruptedException e) {
>           Thread.currentThread().interrupt();
>         }
>         for (Map.Entry<DelegationTokenRenewerEvent, Future<?>> entry : futures
>             .entrySet()) {
>           DelegationTokenRenewerEvent evt = entry.getKey();
> ... {code}



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to