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

标签 java out-of-memory ignite

我们的 apache ignite 2.7.0(由 docker 部署)多次出现 OOM 异常。

我发现了这个日志消息:

消息队列限制设置为 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>

最佳答案

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

Message queue limit is set to 0 which may lead to potential OOMEs

突出显示我的^

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

您可以通过调用 TcpCommunicationSPI.setMessageQueueLimit() 在代码中设置它或
<property name="messageQueueLimit" value="1024"/>TcpCommunicationSpi bean .

关于java - 如何修复 apache ignite 2.7.0 的 OOM 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59353920/

相关文章:

java - 当我运行 Spring Boot 应用程序时创建 bean 时出错

java - Docker 运行小型 Java 类 : Could Not Find Or Load Main Class (Even Though It Exists)

c# - 并行代码抛出 OutOfRangeException

reactjs - 我不断收到此错误 "RangeError: Array buffer allocation failed"

java - Mallet CRF 分类器出现 OutOfMemoryError

java - 没有找到适合 setString 的方法

Java SSL 握手异常 "no cipher suites in common"

java - Apache Ignite IGFS 不使用非堆空间

java - Apache ignite 关于 setStoreKeepBinary 和 setBackups 的缓存配置

java - Apache ignite 缓存事件的单个缓存(映射)事件注册