如何修复我的 apache ignite 2.7.0 的 OOM 异常?

问题描述 投票:0回答:2

我们的 apache ignite 2.7.0 多次出现 OOM 异常,该版本是由 docker 部署的。

我发现了这条日志消息:

消息队列限制设置为 0,当在 FULL ASYNC 或 PRIMARY_SYNC 模式下运行缓存操作时,由于发送方和接收方的消息队列增长,可能会导致潜在的 OOME。

我在https://apacheignite.readme.io/docs/clients-vs-servers#section-managing-slow-clients找到了关于此的消息。

所以,我想重现 OOM 异常,然后修改配置以确保我以正确的方式修复 OOM。 但是我无法重现OOM异常,那么我该如何重现它呢?

另一个问题是:默认过期时间是多少?
因为我没有在 https://apacheignite.readme.io/docs/expiry-policies.

获得默认过期时间

任何帮助者将不胜感激。

以下是我当前的配置:

    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="cacheConfiguration">
            <list>
                <bean class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="name"/>
                    <property name="atomicityMode" value="ATOMIC"/>
                    <property name="cacheMode" value="REPLICATED"/>
                </bean>
                        <bean class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="session"/>
                    <property name="atomicityMode" value="ATOMIC"/>
                    <property name="cacheMode" value="REPLICATED"/>
                </bean>
            </list>
        </property>

        <property name="peerClassLoadingEnabled" value="true"/>

        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                        <property name="addresses">
                            <list>
                                <value>10.130.221.31</value>
                                <value>10.130.223.32:47500..47509</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
java out-of-memory ignite
2个回答
3
投票

请记住,日志消息实际上显示:

消息队列限制设置为 0,这可能导致潜在的 OOME

突出我的^

这表明集群中的节点具有用于节点间通信的队列。它们曾经是绑定的,但现在设置为 0,表示“无限制”。因此,如果一个节点速度缓慢,其他节点向其发送消息最终可能会无限制地备份这些消息,这可能会导致 OOME。 您可以通过调用

TcpCommunicationSPI.setMessageQueueLimit()

 在代码中设置它
<property name="messageQueueLimit" value="1024"/>
TcpCommunicationSpi


0
投票

但是您只能通过收集堆转储并使用堆分析器检查其中是否存在可疑内容来找出答案。

© www.soinside.com 2019 - 2024. All rights reserved.