Grails Apache Ignite在启动时挂起

Grails Apache Ignite在启动时挂起,grails,grails-2.0,ignite,hibernate-cache,Grails,Grails 2.0,Ignite,Hibernate Cache,我们使用ApacheIgniteV2.2作为grails应用程序中的hibernate二级缓存。我们有4个节点群集,每个节点都有10G RAM。第一个节点启动正常。但随后的挂起。有时第二,有时第三或第四。成功的创业也会发生,但非常罕见。 应用程序始终挂起在同一位置: "host-startStop-1" #45 daemon prio=5 os_prio=0 tid=0x00007f7cac004800 nid=0x3d44 waiting on condition [0x00007f7cfdd

我们使用ApacheIgniteV2.2作为grails应用程序中的hibernate二级缓存。我们有4个节点群集,每个节点都有10G RAM。第一个节点启动正常。但随后的挂起。有时第二,有时第三或第四。成功的创业也会发生,但非常罕见。 应用程序始终挂起在同一位置:

"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)
“host-startStop-1”#45守护进程优先级=5 os#u优先级=0 tid=0x00007f7cac004800 nid=0x3d44等待条件[0x00007f7cfdd81000]
java.lang.Thread.State:定时等待(停车)
在sun.misc.Unsafe.park(本机方法)
位于java.util.concurrent.locks.LockSupport.parknos(LockSupport.java:338)
位于org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:216)
位于org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:158)
位于org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:150)
位于org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager.onKernalStart(GridCachePartitionExchangeManager.java:551)
位于org.apache.ignite.internal.processors.cache.GridCacheProcessor.onKernalStart(GridCacheProcessor.java:843)
位于org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1040)
位于org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1896)
位于org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1648)
-已锁定(org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance)
位于org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1076)
位于org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:596)
位于org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:520)
位于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)
IgniteConfiguration配置=新的IgniteConfiguration()
列出缓存配置=[]
用于(字符串名称:缓存){
CacheConfiguration CacheConfiguration=新的CacheConfiguration()
cacheConfiguration.setCacheMode(CacheMode.REPLICATED)
cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL\u ASYNC)
cacheConfiguration.setName(名称)
cacheConfiguration.onheapCacheEnabled=true
cacheConfiguration.executionpolicy=new LruEvictionPolicy()
cacheConfiguration.memoryPolicyName=内存策略
cacheConfigurations.add(cacheConfiguration)
}
对于(字符串名称:['org.hibernate.cache.spi.UpdateTimestampsCache',
'org.hibernate.cache.internal.StandardQueryCache']){
CacheConfiguration CacheConfiguration=新的CacheConfiguration()
cacheConfiguration.setCacheMode(CacheMode.REPLICATED)
cacheConfiguration.setAtomicityMode(CacheAtomicityMode.ATOMIC)
cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL\u ASYNC)
cacheConfiguration.setName(名称)
cacheConfiguration.onheapCacheEnabled=true
cacheConfiguration.executionpolicy=new LruEvictionPolicy()
cacheConfiguration.memoryPolicyName=内存策略
cacheConfigurations.add(cacheConfiguration)
}
setCacheConfiguration(cacheConfigurations.toArray(新的CacheConfiguration[cacheConfigurations.size()]))
configuration.peerClassLoadingEnabled=true
configuration.igniteInstanceName=Constants.IGNITE\u网格
configuration.gridLogger=new Slf4jLogger()
MemoryConfiguration MemoryConfiguration=新的MemoryConfiguration()
memoryConfiguration.defaultMemoryPolicySize=1*1024*1024*1024l
MemoryPolicyConfiguration l2CachePolicy=新的MemoryPolicyConfiguration()
l2CachePolicy.name=内存\u策略
l2CachePolicy.setMaxSize(4*1024*1024*1024l)
l2CachePolicy.PageReceictionMode=DataPageReceictionMode.RANDOM\u LRU
memoryConfiguration.SetMemoryPolicys(l2CachePolicy)
configuration.memoryConfiguration=memoryConfiguration
int[]eventTypes=新int[1]
eventTypes[0]=EventType.EVT\u节点\u失败
configuration.includeEventTypes=事件类型

Map如果您想在一台物理机器上运行多个节点,我建议您配置(因为在默认情况下,在2.2版中,Ignite将需要一个节点80%的物理RAM)或更新到2.3版(默认值减少到20%)

您可以尝试使用名称中不包含句号“.”的缓存吗?这会导致延迟问题。

不可能从一个线程的线程转储中理解任何内容。请共享所有节点的完整日志和线程转储I添加了失败和成功节点的完整线程转储I每台机器只有1个节点。我已经配置了MemoryConfiguration。然后请在非静默模式下运行Ignite(-diagnite_Quiet=false或“-v”),并共享完整日志。我不知道如何获取完整日志-DIGNITE_QUIET=false不会产生任何错误logs@DmitryS这是
ignite.sh
ignite.bat
的参数。还可以查看
日志/
@alamar我们使用嵌入式ignite作为hibernate二级缓存。No。我们使用ignite作为hibernate二级缓存。我们无法选择缓存名称。@DmitryS但如果删除这些名称可以解决问题,您至少可以尝试一下吗?