2017-09-14 20 views
1

there:ignite:igniteCacheを含むストライププールの可能性のある飢餓

ignite cacheを使用するとエラーが発生しました。 私のシステムは、zookeeperを使用するマスターノードを選択し、多くのスレーブノードを持っています。マスタープロセスはキャッシュの有効期限切れの値を点火し、点火キューに入れます。スレーブノードはデータを点火キャッシュに送り、streamer.addData(k、v)キューを点火する。 私のコードは次のとおりです。

のIgniteキャッシュとストリーマ:

// use zookeeper IpFinder 
    ignite = Ignition.getOrStart(igniteConfiguration); 
    igniteCache = ignite.getOrCreateCache(cacheConfiguration); 
    igniteCache.registerCacheEntryListener(new MutableCacheEntryListenerConfiguration<>(
     (Factory<CacheEntryListener<K, CountValue>>)() -> (CacheEntryExpiredListener<K, CountValue>)this 
      ::onCacheExpired, null, true, true)); 

    //onCacheExpired master resolve the expired entry and put in igniteQueue 

    cacheConfiguration.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ONE_MINUTE)); 

    igniteDataStreamer = ignite.dataStreamer(igniteCache.getName()); 
    igniteDataStreamer.deployClass(BaseIgniteStreamCount.class); 
    igniteDataStreamer.allowOverwrite(true); 
    igniteDataStreamer.receiver(StreamTransformer.from((CacheEntryProcessor<K, CountValue, Object>)(e, arg) -> { 
     // process the value. 
     return null; 
    })); 

マスタープロセスエントリがキャッシュから期限切れ、および発火キューに入れる:

CollectionConfiguration collectionConfiguration = new CollectionConfiguration().setCollocated(true); 
    queue = ignite.queue(igniteQueueName, 0, collectionConfiguration); 

スレーブがキューを消費します。

しかし、私は、後で時間を実行した後、以下のエラーログを得た:

2017-09-14 17:06:45,256 org.apache.ignite.logger.java.JavaLogger warning 
WARNING: >>> Possible starvation in striped pool. 
    Thread name: sys-stripe-6-#7%ignite% 
    Queue: [] 
    Deadlock: false 
    Completed: 77168 
Thread [name="sys-stripe-6-#7%ignite%", id=134, state=WAITING, blockCnt=0, waitCnt=68842] 
     at sun.misc.Unsafe.park(Native Method) 
     at java.util.concurrent.locks.LockSupport.park(LockSupport.java:304) 
     at o.a.i.i.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:176) 
     at o.a.i.i.util.future.GridFutureAdapter.get(GridFutureAdapter.java:139) 
     at o.a.i.i.processors.continuous.GridContinuousProcessor.addNotification(GridContinuousProcessor.java:935) 
     at o.a.i.i.processors.cache.query.continuous.CacheContinuousQueryHandler.onEntryUpdate(CacheContinuousQueryHandler.java:850) 
     at o.a.i.i.processors.cache.query.continuous.CacheContinuousQueryHandler.access$700(CacheContinuousQueryHandler.java:82) 
     at o.a.i.i.processors.cache.query.continuous.CacheContinuousQueryHandler$1.onEntryUpdated(CacheContinuousQueryHandler.java:413) 
     at o.a.i.i.processors.cache.query.continuous.CacheContinuousQueryManager.onEntryExpired(CacheContinuousQueryManager.java:429) 
     at o.a.i.i.processors.cache.GridCacheMapEntry.onExpired(GridCacheMapEntry.java:3046) 
     at o.a.i.i.processors.cache.GridCacheMapEntry.onTtlExpired(GridCacheMapEntry.java:2961) 
     at o.a.i.i.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:61) 
     at o.a.i.i.processors.cache.GridCacheTtlManager$1.applyx(GridCacheTtlManager.java:52) 
     at o.a.i.i.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:38) 
     at o.a.i.i.processors.cache.IgniteCacheOffheapManagerImpl.expire(IgniteCacheOffheapManagerImpl.java:1007) 
     at o.a.i.i.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:198) 
     at o.a.i.i.processors.cache.GridCacheTtlManager.expire(GridCacheTtlManager.java:160) 
     at o.a.i.i.processors.cache.GridCacheUtils.unwindEvicts(GridCacheUtils.java:854) 
     at o.a.i.i.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1073) 
     at o.a.i.i.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:561) 
     at o.a.i.i.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:378) 
     at o.a.i.i.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:304) 
     at o.a.i.i.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:99) 
     at o.a.i.i.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:293) 
     at o.a.i.i.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1556) 
     at o.a.i.i.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1184) 
     at o.a.i.i.managers.communication.GridIoManager.access$4200(GridIoManager.java:126) 
     at o.a.i.i.managers.communication.GridIoManager$9.run(GridIoManager.java:1097) 
     at o.a.i.i.util.StripedExecutor$Stripe.run(StripedExecutor.java:483) 
     at java.lang.Thread.run(Thread.java:745) 

答えて

1

ストライププールは、メッセージの処理を担当しています。この警告は、いくつかのストライプで進展がないことを示しています。ネットワーク接続が不良であるか、大量のオブジェクトをキャッシュまたはキューに入れると発生する可能性があります。

あなたはこれらのスレッドでそれについての詳細な情報を見つけることがあります。答えを

http://apache-ignite-users.70518.x6.nabble.com/Possible-starvation-in-striped-pool-td14892.html

http://apache-ignite-users.70518.x6.nabble.com/Possible-starvation-in-striped-pool-message-td15993.html

+0

TKSが、uは私のcase.i開始発火キャッシュと異なる理由によって引き起こさ与えるこれら二つのケースをCacheMode.PARTITIONEDを持つすべてのノードに適用され、すべてのノードキャッシュは期限切れになり、互いのノードに通知されます。 –

+0

しかし、マスタノードだけが期限切れのエントリを処理しますが、これは待ちを引き起こしますか? –

+1

確実に知りたい場合は、スレッドダンプを取得し、そのような警告が表示されたら解析してください。 最も一般的な理由は、キャッシュ内のオブジェクトのサイズが大きいことです。シリアライズおよびデシリアライズ中に長いポーズが発生します。スレッドダンプは、スレッドが何をしているのかを表示します。 – Denis

関連する問題