2017-12-22 8 views
11

grailsアプリケーションでapache ignite v2.2をhibernate第2レベルキャッシュとして使用します。私たちはそれぞれ10GのRAMを持つ4つのノードクラスタを持っています。最初のノードはokを開始します。しかしその後のハングアップ。ときどき2番時折3番または4番。成功したスタートアップも起こりますが、非常にまれです。 アプリケーションは、同じ場所に常にハング:起動時にApache Igniteがハングアップする

"host-startStop-1" #45 daemon prio=5 os_prio=0 tid=0x00007f7cac004800 nid=0x3d44 waiting on condition [0x00007f7cfdd81000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
     at sun.misc.Unsafe.park(Native Method) 
     at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:338) 
     at org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:216) 
     at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:158) 
     at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:150) 
     at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager.onKernalStart(GridCachePartitionExchangeManager.java:551) 
     at org.apache.ignite.internal.processors.cache.GridCacheProcessor.onKernalStart(GridCacheProcessor.java:843) 
     at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1040) 
     at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1896) 
     at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1648) 
     - locked <0x00000007890a1198> (a org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance) 
     at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1076) 
     at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:596) 
     at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:520) 
     at org.apache.ignite.Ignition.start(Ignition.java:322) 

他のすべてのノードは、このプロセス中にロックされています。構成:

IgniteConfiguration configuration = new IgniteConfiguration() 
     List<CacheConfiguration> cacheConfigurations = [] 
     for (String name : caches) { 
      CacheConfiguration cacheConfiguration = new CacheConfiguration<>() 
      cacheConfiguration.setCacheMode(CacheMode.REPLICATED) 
      cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL) 
      cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_ASYNC) 
      cacheConfiguration.setName(name) 
      cacheConfiguration.onheapCacheEnabled = true 
      cacheConfiguration.evictionPolicy = new LruEvictionPolicy() 
      cacheConfiguration.memoryPolicyName = MEMORY_POLICY 
      cacheConfigurations.add(cacheConfiguration) 
     } 
     for (String name : ['org.hibernate.cache.spi.UpdateTimestampsCache', 
          'org.hibernate.cache.internal.StandardQueryCache']) { 
      CacheConfiguration cacheConfiguration = new CacheConfiguration<>() 
      cacheConfiguration.setCacheMode(CacheMode.REPLICATED) 
      cacheConfiguration.setAtomicityMode(CacheAtomicityMode.ATOMIC) 
      cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_ASYNC) 
      cacheConfiguration.setName(name) 
      cacheConfiguration.onheapCacheEnabled = true 
      cacheConfiguration.evictionPolicy = new LruEvictionPolicy() 
      cacheConfiguration.memoryPolicyName = MEMORY_POLICY 
      cacheConfigurations.add(cacheConfiguration) 
     } 
     configuration.setCacheConfiguration(cacheConfigurations.toArray(new CacheConfiguration[cacheConfigurations.size()])) 
     configuration.peerClassLoadingEnabled = true 
     configuration.igniteInstanceName = Constants.IGNITE_GRID 
     configuration.gridLogger = new Slf4jLogger() 
     MemoryConfiguration memoryConfiguration = new MemoryConfiguration() 
     memoryConfiguration.defaultMemoryPolicySize = 1 * 1024 * 1024 * 1024l 
     MemoryPolicyConfiguration l2CachePolicy = new MemoryPolicyConfiguration() 
     l2CachePolicy.name = MEMORY_POLICY 
     l2CachePolicy.setMaxSize(4 * 1024 * 1024 * 1024l) 
     l2CachePolicy.pageEvictionMode = DataPageEvictionMode.RANDOM_LRU 
     memoryConfiguration.setMemoryPolicies(l2CachePolicy) 
     configuration.memoryConfiguration = memoryConfiguration 
     int[] eventTypes = new int[1] 
     eventTypes[0] = EventType.EVT_NODE_FAILED 
     configuration.includeEventTypes = eventTypes 
     Map<IgnitePredicate<? extends Event>, int[]> listeners = new HashedMap() 
     listeners.put(new NodeFailedEventListener(), eventTypes) 
     configuration.localEventListeners = listeners 
     TcpCommunicationSpi commSpi = new TcpCommunicationSpi() 
     commSpi.slowClientQueueLimit = 1000 
     commSpi.messageQueueLimit = 5000 
     configuration.communicationSpi = commSpi 
     TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi() 
     configuration.discoverySpi = discoverySpi 
     if (grailsApplication.config.grails?.plugin?.awssdk?.accessKey && Env.igniteS3Bucket) { 
      TcpDiscoveryS3IpFinder awsIpFinder = new TcpDiscoveryS3IpFinder() 
      awsIpFinder.setBucketName(Env.igniteS3Bucket) 
      AWSCredentials awsCredentials = new BasicAWSCredentials(grailsApplication.config.grails.plugin.awssdk.accessKey, 
        grailsApplication.config.grails.plugin.awssdk.secretKey) 
      awsIpFinder.setAwsCredentials(awsCredentials) 
      discoverySpi.ipFinder = awsIpFinder 
     } else { 
      TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder() 
      ipFinder.setAddresses(["127.0.0.1:47500"]) 
      discoverySpi.ipFinder = ipFinder 
     } 
     configuration.classLoader = grailsApplication.classLoader 
     ignite = Ignition.start(configuration) 

EDIT

Full thread dump of failed node

Full thread dump of succeed node

+1

1つのスレッドのスレッドダンプから何かを理解することは不可能です。すべてのノードからフルログとスレッドダンプを共有してください。 –

+0

失敗したノードと成功したノードのフルスレッドダンプを追加しました –

答えて

0

使用すると、1台の物理マシン上で1個のノード以上のものを実行したい場合は、私があるため、デフォルトでは(MemoryConfigurationの設定をお勧めします、バージョン2.2では、Igniteは1つのノードに物理RAMの80%を必要とする)またはバージョン2.3へのアップデート(デフォルト値は20%に減少)

+0

マシンごとに1つのノードしかありません。私はMemoryConfigurationを設定しました。 –

+1

Igniteを非Quietモード(-DIGNITE_QUIET = falseまたは "-v")で実行し、フルログを共有してください –

+1

フルログを取得する方法がわかりません。 -DIGNITE_QUIET = falseはログを生成しません –

0

ピリオド 'を含まないキャッシュで試してください。'彼らの名前で?これは遅延問題を引き起こすことが知られています。

+0

いいえ、私たちは、hibernate第2レベルキャッシュとしてigniteを使用します。キャッシュ名は選択できません。 –

+1

@DmitrySしかし、これらの問題を解決するには、少なくとも問題を解決することはできますか? – alamar

関連する問題