[
https://issues.apache.org/jira/browse/ZOOKEEPER-4952?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kezhu Wang resolved ZOOKEEPER-4952.
-----------------------------------
Fix Version/s: 3.10.0
Assignee: Li Wang
Resolution: Fixed
> Reduce the GC overhead of Prometheus reject exception handling
> --------------------------------------------------------------
>
> Key: ZOOKEEPER-4952
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4952
> Project: ZooKeeper
> Issue Type: Improvement
> Components: metric system
> Affects Versions: 3.8.0, 3.9.0, 3.8.2, 3.8.3, 3.9.1, 3.8.4, 3.9.2, 3.9.3
> Reporter: Li Wang
> Assignee: Li Wang
> Priority: Major
> Labels: pull-request-available
> Fix For: 3.10.0
>
> Time Spent: 2h 40m
> Remaining Estimate: 0h
>
> As part of ZOOKEEPER-4289, Prometheus summary reporting is handled as an
> async operation using ThreadPoolExecutor.
> The default RejectedExecutionHandler used by ThreadPoolExecutor is
> AbortPolicy, which performs toString() on both the Runnable object and
> exception object. This can significantly impact performance when too many
> exceptions occur after the max queue size exceeds.
> {code:java}
> public static class AbortPolicy implements RejectedExecutionHandler {
> /**
> * Creates an {@code AbortPolicy}.
> */
> public AbortPolicy() { }
> /**
> * Always throws RejectedExecutionException.
> *
> * @param r the runnable task requested to be executed
> * @param e the executor attempting to execute this task
> * @throws RejectedExecutionException always
> */
> public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
> throw new RejectedExecutionException("Task " + r.toString() +
> " rejected from " +
> e.toString());
> }
> }
> {code}
> We can reduce the GC overhead and improve performance by implementing a
> PrometheusRejectExceptionHandler and overriding the rejectedExecution() API.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)