When using CacheMode.LOCAL, OOM

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

When using CacheMode.LOCAL, OOM

Hi,
    I'm going to use Ignite instead of guava. During testing, I find that CacheMode.LOCAL is often OOM. Please help me check what's wrong with it. Thank you very much.

    Ignite version : 2.6.0

    jdk 1.8.0_151-b12

    Test Code :
==============
public class LocalCacheDemo {
    public static void main(String[] args) throws InterruptedException {

        String cacheName = "localCache";
        String regionName = "localRegin";

        DataStorageConfiguration dataStorageConfiguration = new DataStorageConfiguration();

        DataRegionConfiguration localReginConf = new DataRegionConfiguration();
        localReginConf.setName(regionName);
        localReginConf.setMetricsEnabled(true);
        localReginConf.setPersistenceEnabled(false);
        localReginConf.setInitialSize(256 * 1024 * 1024);
        long max = 2L * 1024L * 1024L * 1024L;
        localReginConf.setMaxSize(max);
        localReginConf.setPageEvictionMode(DataPageEvictionMode.RANDOM_2_LRU);
        dataStorageConfiguration.setDataRegionConfigurations(localReginConf);
        dataStorageConfiguration.setPageSize(1024 * 8);

        CacheConfiguration cacheCfg = new CacheConfiguration(cacheName);
        cacheCfg.setCacheMode(CacheMode.LOCAL);
        cacheCfg.setDataRegionName(regionName);
        cacheCfg.setBackups(0);
        cacheCfg.setStatisticsEnabled(true);
        cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
        cacheCfg.setOnheapCacheEnabled(false);

        IgniteConfiguration cfg = new IgniteConfiguration();
        cfg.setCacheConfiguration(cacheCfg);
        cfg.setDataStorageConfiguration(dataStorageConfiguration);

        Ignite ignite = Ignition.start(cfg);

        final ClusterGroup clusterGroup = ignite.cluster().forLocal();

        final IgniteCache<String, byte[]> cache = ignite.getOrCreateCache(cacheName);

        final ExecutorService pool = Executors.newFixedThreadPool(8);

        for (int i = 0; i < 8; i++) {
            pool.submit(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        cache.put(UUID.randomUUID().toString(), UUID.randomUUID().toString().getBytes());
                    }
                }
            });
        }
    }
}
==============
JVM param:

-server -XX:+UseG1GC -XX:+AlwaysPreTouch -XX:+ScavengeBeforeFullGC -Xmx2g -Xms2g -XX:MaxMetaspaceSize=100m -XX:MaxGCPauseMillis=100 -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=256M -Xloggc:/home/qipu/production/localCache/gc.log
===============
===============
GC log:

2018-08-09T16:36:59.630+0800: 750.387: Total time for which application threads were stopped: 0.0104034 seconds
2018-08-09T16:36:59.630+0800: 750.387: [GC pause (G1 Evacuation Pause) (young) (initial-mark)
Desired survivor size 6815744 bytes, new threshold 15 (max 15)
, 0.0041734 secs]
   [Parallel Time: 3.1 ms, GC Workers: 4]
      [GC Worker Start (ms): Min: 750387.6, Avg: 750387.7, Max: 750387.8, Diff: 0.1]
      [Ext Root Scanning (ms): Min: 0.3, Avg: 0.5, Max: 0.9, Diff: 0.6, Sum: 2.1]
      [Code Root Marking (ms): Min: 0.2, Avg: 0.6, Max: 1.5, Diff: 1.3, Sum: 2.6]
      [Update RS (ms): Min: 0.6, Avg: 1.4, Max: 1.8, Diff: 1.2, Sum: 5.6]
         [Processed Buffers: Min: 2, Avg: 3.5, Max: 5, Diff: 3, Sum: 14]
      [Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
      [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
      [Object Copy (ms): Min: 0.1, Avg: 0.3, Max: 0.4, Diff: 0.3, Sum: 1.3]
      [Termination (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 0.4]
      [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
      [GC Worker Total (ms): Min: 2.9, Avg: 3.0, Max: 3.0, Diff: 0.1, Sum: 11.9]
      [GC Worker End (ms): Min: 750390.7, Avg: 750390.7, Max: 750390.7, Diff: 0.0]
   [Code Root Fixup: 0.1 ms]
   [Code Root Migration: 0.0 ms]
   [Clear CT: 0.1 ms]
   [Other: 0.9 ms]
      [Choose CSet: 0.0 ms]
      [Ref Proc: 0.2 ms]
      [Ref Enq: 0.0 ms]
      [Free CSet: 0.0 ms]
   [Eden: 0.0B(102.0M)->0.0B(102.0M) Survivors: 0.0B->0.0B Heap: 2046.5M(2048.0M)->2046.5M(2048.0M)]
 [Times: user=0.01 sys=0.00, real=0.00 secs]
2018-08-09T16:36:59.635+0800: 750.392: Total time for which application threads were stopped: 0.0045325 seconds
2018-08-09T16:36:59.635+0800: 750.392: [GC concurrent-root-region-scan-start]
2018-08-09T16:36:59.635+0800: 750.392: [GC concurrent-root-region-scan-end, 0.0000078 secs]
2018-08-09T16:36:59.635+0800: 750.392: [GC concurrent-mark-start]
2018-08-09T16:36:59.635+0800: 750.392: [Full GC (Allocation Failure)
===============

dkarachentsev dkarachentsev
Reply | Threaded
Open this post in threaded view
|

Re: When using CacheMode.LOCAL, OOM

Hi,

I've opened a ticket for this [1]. It seems LOCAL cache keeps all entries
on-heap. If you use only one node - switch to PARTITIONED, if more than one
- PARTITIONED + node filter [2]

[1] https://issues.apache.org/jira/browse/IGNITE-9257
[2]
https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CacheConfiguration.html#setNodeFilter-org.apache.ignite.lang.IgnitePredicate-

Thanks!
-Dmitry



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/