[ 
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)

Reply via email to