[ https://issues.apache.org/jira/browse/IGNITE-7319?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrey Aleksandrov updated IGNITE-7319: --------------------------------------- Description: The following code creates local caches: {code:java} private IgniteCache<String, BinaryObject> createLocalCache(String name) { CacheConfiguration<String, BinaryObject> cCfg = new CacheConfiguration<>(); cCfg.setName(name); cCfg.setGroupName("localCaches"); // without group leak is much bigger! cCfg.setStoreKeepBinary(true); cCfg.setCacheMode(CacheMode.LOCAL); cCfg.setOnheapCacheEnabled(false); cCfg.setCopyOnRead(false); cCfg.setBackups(0); cCfg.setWriteBehindEnabled(false); cCfg.setReadThrough(false); cCfg.setReadFromBackup(false); cCfg.setQueryEntities(<some basic query here>); return ignite.createCache(cCfg).withKeepBinary(); } {code} The caches are placed in the queue and are picked up by the worker thread which just destroys them after removing from the queue. This setup seems to generate a memory leak of about 1GB per day. When looking at heap dump, I see all space is occupied by instances of java.util.concurrent.ConcurrentSkipListMap$Node. User list: [http://apache-ignite-users.70518.x6.nabble.com/Memory-leak-in-GridCachePartitionExchangeManager-tt18995.html Update: When local cache is created then new CONTINUOUS_QUERY task is created too. This task should work until it canceled but in Ignite code we don't store the CancelableTask somewhere. After destroying the cache this task continues its work. was: The following code creates local caches: {code:java} private IgniteCache<String, BinaryObject> createLocalCache(String name) { CacheConfiguration<String, BinaryObject> cCfg = new CacheConfiguration<>(); cCfg.setName(name); cCfg.setGroupName("localCaches"); // without group leak is much bigger! cCfg.setStoreKeepBinary(true); cCfg.setCacheMode(CacheMode.LOCAL); cCfg.setOnheapCacheEnabled(false); cCfg.setCopyOnRead(false); cCfg.setBackups(0); cCfg.setWriteBehindEnabled(false); cCfg.setReadThrough(false); cCfg.setReadFromBackup(false); cCfg.setQueryEntities(<some basic query here>); return ignite.createCache(cCfg).withKeepBinary(); } {code} The caches are placed in the queue and are picked up by the worker thread which just destroys them after removing from the queue. This setup seems to generate a memory leak of about 1GB per day. When looking at heap dump, I see all space is occupied by instances of java.util.concurrent.ConcurrentSkipListMap$Node. User list: [http://apache-ignite-users.70518.x6.nabble.com/Memory-leak-in-GridCachePartitionExchangeManager-tt18995.html U|http://apache-ignite-users.70518.x6.nabble.com/Memory-leak-in-GridCachePartitionExchangeManager-tt18995.html]pdate: When local cache is created then new CONTINUOUS_QUERY task is created too. This task should work until it canceled but in Ignite code we don't store the CancelableTask somewhere. After destroying the cache this task continue its work. > Memory leak during creating/destroying local cache > -------------------------------------------------- > > Key: IGNITE-7319 > URL: https://issues.apache.org/jira/browse/IGNITE-7319 > Project: Ignite > Issue Type: Bug > Components: cache > Affects Versions: 2.3 > Reporter: Mikhail Cherkasov > Assignee: Andrey Aleksandrov > Priority: Major > Fix For: 2.6 > > Attachments: Demo.java > > > The following code creates local caches: > {code:java} > private IgniteCache<String, BinaryObject> createLocalCache(String name) { > CacheConfiguration<String, BinaryObject> cCfg = new > CacheConfiguration<>(); > cCfg.setName(name); > cCfg.setGroupName("localCaches"); // without group leak is much > bigger! > cCfg.setStoreKeepBinary(true); > cCfg.setCacheMode(CacheMode.LOCAL); > cCfg.setOnheapCacheEnabled(false); > cCfg.setCopyOnRead(false); > cCfg.setBackups(0); > cCfg.setWriteBehindEnabled(false); > cCfg.setReadThrough(false); > cCfg.setReadFromBackup(false); > cCfg.setQueryEntities(<some basic query here>); > return ignite.createCache(cCfg).withKeepBinary(); > } > {code} > The caches are placed in the queue and are picked up by the worker thread > which just destroys them after removing from the queue. > This setup seems to generate a memory leak of about 1GB per day. > When looking at heap dump, I see all space is occupied by instances of > java.util.concurrent.ConcurrentSkipListMap$Node. > User list: > [http://apache-ignite-users.70518.x6.nabble.com/Memory-leak-in-GridCachePartitionExchangeManager-tt18995.html > Update: > When local cache is created then new CONTINUOUS_QUERY task is created too. > This task should work until it canceled but in Ignite code we don't store the > CancelableTask somewhere. After destroying the cache this task continues its > work. -- This message was sent by Atlassian JIRA (v7.6.3#76005)