[jboss-jira] [JBoss JIRA] (JGRP-2312) LazyThreadFactory can keep threads instances alive for a long period

William Burns (Jira) issues at jboss.org
Tue Oct 30 13:27:00 EDT 2018


     [ https://issues.jboss.org/browse/JGRP-2312?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

William Burns updated JGRP-2312:
--------------------------------
    Description: 
The LazyThreadFactory keeps all Thread objects in a ConcurrentLinkedQueue wrapped by a WeakReference. This means that once a thread terminates, its instance along with all native memory required for it can linger until the GC eventually reclaims it. Normally this is not an issue when the JVM heap is being recycled often, but in cases where you have low heap requirement operations (ie. off heap data container) this can cause these objects to pile up and eventually exhaust native memory.

This queue is also a very slow JVM heap leak as threads are tossed out, since the WeakReference and Queue Node objects are never reclaimed unless the transport is stopped.

The best way to fix this would be to plug into when the thread is set to TERMINATED state and to remove these nodes.

Also a workaround is to increase the core thread count and increase the keepalive timeout so that threads are not destroyed and created nearly as often.

  was:
The LazyThreadFactory keeps all Thread objects in a ConcurrentLinkedQueue wrapped by a WeakReference. This means that once a thread terminates, its instance along with all native memory required for it can linger until the GC eventually reclaims it. Normally this is not an issue when the JVM heap is being recycled often, but in cases where you have low heap requirement operations (ie. off heap data container) this can cause these objects to pile up and eventually exhaust native memory.

This queue is also a very slow JVM heap leak as threads are tossed out, since the WeakReference and Queue Node objects are never reclaimed unless the transport is stopped.

The best way would be to plug into when the thread is set to TERMINATED state and to remove these nodes.

Also a workaround is to increase the core thread count and increase the keepalive timeout so that threads are not destroyed and created nearly as often.



> LazyThreadFactory can keep threads instances alive for a long period
> --------------------------------------------------------------------
>
>                 Key: JGRP-2312
>                 URL: https://issues.jboss.org/browse/JGRP-2312
>             Project: JGroups
>          Issue Type: Bug
>    Affects Versions: 4.0.15
>            Reporter: William Burns
>            Assignee: Bela Ban
>            Priority: Major
>
> The LazyThreadFactory keeps all Thread objects in a ConcurrentLinkedQueue wrapped by a WeakReference. This means that once a thread terminates, its instance along with all native memory required for it can linger until the GC eventually reclaims it. Normally this is not an issue when the JVM heap is being recycled often, but in cases where you have low heap requirement operations (ie. off heap data container) this can cause these objects to pile up and eventually exhaust native memory.
> This queue is also a very slow JVM heap leak as threads are tossed out, since the WeakReference and Queue Node objects are never reclaimed unless the transport is stopped.
> The best way to fix this would be to plug into when the thread is set to TERMINATED state and to remove these nodes.
> Also a workaround is to increase the core thread count and increase the keepalive timeout so that threads are not destroyed and created nearly as often.



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the jboss-jira mailing list