【问题标题】:How to fix OOM exception for my apache ignite 2.7.0?如何修复我的 apache ignite 2.7.0 的 OOM 异常?
【发布时间】:2019-12-16 18:27:21
【问题描述】:

我们的 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


    【解决方案1】:

    请记住,日志消息实际上是这样写的:

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

    高亮我的^

    这传达了集群中的节点具有用于节点间通信的队列的事实。它们曾经被绑定,但现在它们设置为 0,表示 无限制。因此,如果一个节点速度较慢,其他发送消息的节点最终可能会无限制支持这些节点,这可能会导致 OOME。

    您可以通过在TcpCommunicationSpi bean 中调用TcpCommunicationSPI.setMessageQueueLimit()
    &lt;property name="messageQueueLimit" value="1024"/&gt; 在代码中设置它。

    【讨论】:

      【解决方案2】:

      您的 OOM 可能与 Apache Ignite 无关,因为它通常不会消耗太多堆(反正有多少?)。

      但您只能通过收集堆转储并使用堆分析器检查可疑内容来解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-03
        • 2013-10-08
        • 2019-11-09
        • 2020-02-20
        • 1970-01-01
        • 2012-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多