[
https://issues.apache.org/jira/browse/HADOOP-15729?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16609308#comment-16609308
]
Sean Mackrory edited comment on HADOOP-15729 at 9/10/18 2:45 PM:
-----------------------------------------------------------------
Assuming you allow the pool to kill core threads and don't pre-start all your
threads (and I'm not opposed to adding configs to control these behaviors if
anyone thinks it'd get used, but I think you'd have to be predictably spending
a *lot* of time on thread creation for that to be worth it), the only change in
behavior when you specify a number of core threads is that the executor will
always prefer to spawn a new thread rather than use an existing idle thread,
and unless you're gradually ramping up a long-term workload I don't think that
makes sense. This is inherently bursty, so I think the sensible approach is to
just 0 as the number of core threads, allow it to expand as needed, and
completely clean up when idle (and that period of time is already configurable).
I'll test a patch for this, but input welcome.
was (Author: mackrorysd):
Assuming you allow the pool to kill core threads and don't pre-start all your
threads (and I'm not opposed to adding configs to control these behaviors if
anyone thinks it'd get used, but I think you'd have to be spending a *lot* of
time on thread creation for that to be worth it), the only change in behavior
when you specify a number of core threads is that the executor will always
prefer to spawn a new thread rather than use an existing idle thread, and
unless you're gradually ramping up a long-term workload I don't think that
makes sense. This is inherently bursty, so I think the sensible approach is to
just 0 as the number of core threads, allow it to expand as needed, and
completely clean up when idle (and that period of time is already configurable).
I'll test a patch for this, but input welcome.
> [s3a] stop treat fs.s3a.max.threads as the long-term minimum
> ------------------------------------------------------------
>
> Key: HADOOP-15729
> URL: https://issues.apache.org/jira/browse/HADOOP-15729
> Project: Hadoop Common
> Issue Type: Sub-task
> Components: fs/s3
> Reporter: Sean Mackrory
> Assignee: Sean Mackrory
> Priority: Major
>
> A while ago the s3a connector started experiencing deadlocks because the AWS
> SDK requires an unbounded threadpool. It places monitoring tasks on the work
> queue before the tasks they wait on, so it's possible (has even happened with
> larger-than-default threadpools) for the executor to become permanently
> saturated and deadlock.
> So we started giving an unbounded threadpool executor to the SDK, and using a
> bounded, blocking threadpool service for everything else S3A needs (although
> currently that's only in the S3ABlockOutputStream). fs.s3a.max.threads then
> only limits this threadpool, however we also specified fs.s3a.max.threads as
> the number of core threads in the unbounded threadpool, which in hindsight is
> pretty terrible.
> Currently those core threads do not timeout, so this is actually setting a
> sort of minimum. Once that many tasks have been submitted, the threadpool
> will be locked at that number until it bursts beyond that, but it will only
> spin down that far. If fs.s3a.max.threads is set reasonably high and someone
> uses a bunch of S3 buckets, they could easily have thousands of idle threads
> constantly.
> We should either not use fs.s3a.max.threads for the corepool size and
> introduce a new configuration, or we should simply allow core threads to
> timeout. I'm reading the OpenJDK source now to see what subtle differences
> there are between core threads and other threads if core threads can timeout.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]