2017-09-14 3 views
1

là:enflammer: la famine possible dans le pool rayé avec igniteCache

J'ai eu l'erreur lors de l'utilisation enflammer le cache. Mon système sélectionne un nœud maître utilise zookeeper et possède de nombreux noeuds esclaves. Le processus maître enflamme le cache et expire les valeurs dans une file d'attente d'allumage. Le noeud esclave fournit des données dans le cache d'allumage streamer.addData (k, v) et consomme le enflamme la file d'attente. Mon code est:

cache Ignite et streamer:

// 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; 
    })); 

processus maître l'entrée expiré à partir du cache, et mettre en file d'attente Ignite:

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

les esclaves consomment la file d'attente.

mais je suis erreur journal ci-dessous après l'exécution heures plus tard:

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) 

Répondre

1

piscine rayé est responsable de traitement des messages. Cet avertissement vous indique qu'il n'y a pas de progrès sur certaines bandes. Cela peut se produire en raison d'une mauvaise connexion réseau ou lorsque vous placez des objets massifs dans un cache ou dans une file d'attente.

Vous pouvez trouver plus d'informations à ce sujet dans ces discussions:

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 pour la réponse, mais ces deux cas donner u causés par des raisons différentes avec mes case.i commencer à allumer le cache sur chaque noeud avec CacheMode.PARTITIONED et chaque cache de noeud expirera et notifiera chaque autre noeud. –

+0

Mais seul le nœud maître traite ces entrées expirées, cela provoquera-t-il une ATTENTE? –

+1

Si vous voulez savoir à coup sûr, essayez d'obtenir un vidage de thread et de l'analyser lorsque de tels avertissements apparaissent. La raison la plus courante est une grande taille d'objets dans le cache. Il provoque de longues pauses pendant la sérialisation et la désérialisation. Thread dump vous permettra de voir ce que font les threads bloqués. – Denis