Hello! I have filed an issue about this: https://issues.apache.org/jira/browse/IGNITE-12837
Please feel free to contribute or draw attention to it. Regards, On 2020/03/18 15:37:26, Andrey Davydov <[email protected]> wrote: > Hello, > > > > There are at least two way link to IgniteKernal leaks to GC root and makes it > unavailable for GC. > > > > 1. The first one: > > > > this - value: org.apache.ignite.internal.IgniteKernal #1 > > <\- grid - class: org.apache.ignite.internal.GridKernalContextImpl, value: > org.apache.ignite.internal.IgniteKernal #1 > > <\- ctx - class: > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing, value: > org.apache.ignite.internal.GridKernalContextImpl #2 > > <\- this$0 - class: > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$10, value: > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing #2 > > <\- serializer - class: org.h2.util.JdbcUtils, value: > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$10 #1 > > <\- [5395] - class: java.lang.Object[], value: org.h2.util.JdbcUtils class > JdbcUtils > > <\- elementData - class: java.util.Vector, value: java.lang.Object[] #37309 > > <\- classes - class: sun.misc.Launcher$AppClassLoader, value: java.util.Vector > #31 > > <\- contextClassLoader (thread object) - class: java.lang.Thread, value: > sun.misc.Launcher$AppClassLoader #1 > > > > org.h2.util.JdbcUtils has static field JavaObjectSerializer serializer, which > see IgniteKernal via IgniteH2Indexing. It make closed and stopped IgniteKernal > non collectable by GC. > > If some Ignites run in same JVM, JdbcUtils will always use only one, and it > can cause some races. > > > > 2. The second way: > > > > this - value: org.apache.ignite.internal.IgniteKernal #2 > > <\- grid - class: org.apache.ignite.internal.GridKernalContextImpl, value: > org.apache.ignite.internal.IgniteKernal #2 > > <\- ctx - class: org.apache.ignite.internal.processors.cache.GridCacheContext, > value: org.apache.ignite.internal.GridKernalContextImpl #1 > > <\- cctx - class: > org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry, > value: org.apache.ignite.internal.processors.cache.GridCacheContext #24 > > <\- parent - class: > org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate, value: > org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry > #4 > > <\- [0] - class: java.lang.Object[], value: > org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate #1 > > <\- elements - class: java.util.ArrayDeque, value: java.lang.Object[] #43259 > > <\- value - class: java.lang.ThreadLocal$ThreadLocalMap$Entry, value: > java.util.ArrayDeque #816 > > <\- [119] - class: java.lang.ThreadLocal$ThreadLocalMap$Entry[], value: > java.lang.ThreadLocal$ThreadLocalMap$Entry #51 > > <\- table - class: java.lang.ThreadLocal$ThreadLocalMap, value: > java.lang.ThreadLocal$ThreadLocalMap$Entry[] #21 > > <\- threadLocals (thread object) - class: java.lang.Thread, value: > java.lang.ThreadLocal$ThreadLocalMap #2 > > > > Link to IgniteKernal leaks to ThreadLocal variable, so when we start/stop many > instances of Ignite in same jvm during testing, we got many stopped “zomby” > ignites on ThreadLocal context of main test thread and it cause OutOfMemory > after some dozens of tests. > > > > Andrey. > > > >
