Ignite 不断崩溃并出现 OOM

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

我们正在运行一个 2-client-3-server 集群。即使我们提供更多堆,我们也会不断看到 OOM。下面是堆转储快照,知道为什么我们看到这么多 CacheEvent 对象吗,这里到底发生了什么?

查看“GridSelectorNioSessionImpl”的源代码,似乎它有一个无限队列正在累积 WriteRequests。知道为什么这些不被冲洗吗?我正在阅读有关设置 messageQueue 的信息,即使是 ignite 日志也会警告它可能会导致 OOM,因为它是无界的。但我无法将该设置与“GridSelectorNioSessionImpl”中发生的队列初始化相关联。

TIA

ignite gridgain distributed-caching apacheignite
1个回答
0
投票

GridContinuousMessage
来自需要通知侦听器更新的连续查询。

看起来队列由于负载过重而变得太大,消息上下文 [dataBytes] 也很大。

我认为您可以使用以下属性:

/** Maximum size of buffer for pending events. Default value is {@code 10_000}. */
public static final int MAX_PENDING_BUFF_SIZE =
    IgniteSystemProperties.getInteger("IGNITE_CONTINUOUS_QUERY_PENDING_BUFF_SIZE", 10_000);

/** Batch buffer size. */
private static final int BUF_SIZE =
    IgniteSystemProperties.getInteger("IGNITE_CONTINUOUS_QUERY_SERVER_BUFFER_SIZE", 1000);

最有趣的是IGNITE_CONTINUOUS_QUERY_SERVER_BUFFER_SIZE

在内部,连续查询将更新存储在缓冲区中,每个分区一个缓冲区。缓冲区被最多 1000 个事件填满,并在满时重新创建。 IE。每个分区可能有 1000 个活动对象。一个节点可能有最多 1024 个分区(默认值),在这种情况下,存储的事件总数最多可达 100 万。现在将其乘以对象的大小(100+ KB)并检查结果。

很可能将 IGNITE_CONTINUOUS_QUERY_SERVER_BUFFER_SIZE 设置为 100 或 50 将解决问题。

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