Start threads in our pools on demand?

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Start threads in our pools on demand?

Vladimir Ozerov
Igniters,

If you look at a thread dump of an idle Ignite instance, you will find
billions threads there. System pool, public pool, management pool, IGFS
pool, data streamer pool, etc..

I think we can easily do the following with no risk to performance:
1) Set core size to zero to all thread pools except of probably system and
marshaller pools.
2) Set TTL so that idle threads die eventually. It can be set to several
minutes, I believe.

Benefits:
1) Better resource utilization. Every thread consumes at least 1Mb of
stack. And remember that some folks in Java community pushes idea that is
it way to restrictive on modern machines, so that it can be increased any
time in future.
2) Better startup time;
3) Easier debug of thread dumps.

Thoughts?

Vladimir.
Reply | Threaded
Open this post in threaded view
|

Re: Start threads in our pools on demand?

Sergi
+100500

We need to stop threads after some idle time.

Sergi

2016-09-29 11:26 GMT+03:00 Vladimir Ozerov <[hidden email]>:

> Igniters,
>
> If you look at a thread dump of an idle Ignite instance, you will find
> billions threads there. System pool, public pool, management pool, IGFS
> pool, data streamer pool, etc..
>
> I think we can easily do the following with no risk to performance:
> 1) Set core size to zero to all thread pools except of probably system and
> marshaller pools.
> 2) Set TTL so that idle threads die eventually. It can be set to several
> minutes, I believe.
>
> Benefits:
> 1) Better resource utilization. Every thread consumes at least 1Mb of
> stack. And remember that some folks in Java community pushes idea that is
> it way to restrictive on modern machines, so that it can be increased any
> time in future.
> 2) Better startup time;
> 3) Easier debug of thread dumps.
>
> Thoughts?
>
> Vladimir.
>
Reply | Threaded
Open this post in threaded view
|

Re: Start threads in our pools on demand?

Alexey Kuznetsov-2
Just as idea -

if we implement stop thread after some idle time, may be it make sense to
add a line to log about this?

--
Alexey Kuznetsov
Reply | Threaded
Open this post in threaded view
|

Re: Start threads in our pools on demand?

Vladimir Ozerov
Created ticket: https://issues.apache.org/jira/browse/IGNITE-4001

On Thu, Sep 29, 2016 at 12:25 PM, Alexey Kuznetsov <[hidden email]>
wrote:

> Just as idea -
>
> if we implement stop thread after some idle time, may be it make sense to
> add a line to log about this?
>
> --
> Alexey Kuznetsov
>
Reply | Threaded
Open this post in threaded view
|

Re: Start threads in our pools on demand?

Vladimir Ozerov
Ignite node thread dump after applying quick and dirty solution - just
added *ThreadPoolExecutor.allowCoreThreadTimeOut(true)* to base thread pool:

"srvc-deploy-#20%null%"
"exchange-worker-#19%null%"
"ttl-cleanup-worker-#18%null%"
"grid-time-coordinator-#17%null%"
"grid-time-server-reader-#16%null%"
"disco-event-worker-#15%null%"
"tcp-disco-ip-finder-cleaner-#5%null%"
"tcp-disco-srvr-#4%null%"
"tcp-disco-msg-worker-#3%null%"
"grid-data-loader-flusher-#14%null%"
"tcp-comm-worker-#1%null%"
"grid-nio-worker-3-#12%null%"
"grid-nio-worker-2-#11%null%"
"grid-nio-worker-1-#10%null%"
"grid-nio-worker-0-#9%null%"
"nio-acceptor-#8%null%"
"grid-timeout-worker-#7%null%"

Looks pretty nice to me. Now need to finalize and benchmark it.

On Thu, Sep 29, 2016 at 2:05 PM, Vladimir Ozerov <[hidden email]>
wrote:

> Created ticket: https://issues.apache.org/jira/browse/IGNITE-4001
>
> On Thu, Sep 29, 2016 at 12:25 PM, Alexey Kuznetsov <
> [hidden email]> wrote:
>
>> Just as idea -
>>
>> if we implement stop thread after some idle time, may be it make sense to
>> add a line to log about this?
>>
>> --
>> Alexey Kuznetsov
>>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Start threads in our pools on demand?

Vladimir Ozerov
Implemented. Will appear in master soon. Benchmarks shown no performance
drop.

On Thu, Sep 29, 2016 at 3:16 PM, Vladimir Ozerov <[hidden email]>
wrote:

> Ignite node thread dump after applying quick and dirty solution - just
> added *ThreadPoolExecutor.allowCoreThreadTimeOut(true)* to base thread
> pool:
>
> "srvc-deploy-#20%null%"
> "exchange-worker-#19%null%"
> "ttl-cleanup-worker-#18%null%"
> "grid-time-coordinator-#17%null%"
> "grid-time-server-reader-#16%null%"
> "disco-event-worker-#15%null%"
> "tcp-disco-ip-finder-cleaner-#5%null%"
> "tcp-disco-srvr-#4%null%"
> "tcp-disco-msg-worker-#3%null%"
> "grid-data-loader-flusher-#14%null%"
> "tcp-comm-worker-#1%null%"
> "grid-nio-worker-3-#12%null%"
> "grid-nio-worker-2-#11%null%"
> "grid-nio-worker-1-#10%null%"
> "grid-nio-worker-0-#9%null%"
> "nio-acceptor-#8%null%"
> "grid-timeout-worker-#7%null%"
>
> Looks pretty nice to me. Now need to finalize and benchmark it.
>
> On Thu, Sep 29, 2016 at 2:05 PM, Vladimir Ozerov <[hidden email]>
> wrote:
>
>> Created ticket: https://issues.apache.org/jira/browse/IGNITE-4001
>>
>> On Thu, Sep 29, 2016 at 12:25 PM, Alexey Kuznetsov <
>> [hidden email]> wrote:
>>
>>> Just as idea -
>>>
>>> if we implement stop thread after some idle time, may be it make sense to
>>> add a line to log about this?
>>>
>>> --
>>> Alexey Kuznetsov
>>>
>>
>>
>