【问题标题】:Hazelcast map memory growing while entry numbers stay stableHazelcast 地图内存增长,而条目数量保持稳定
【发布时间】:2015-07-25 00:49:38
【问题描述】:

我们使用 Hazelcast 3.3.5 的独立单节点安装来存储一些用户的会话信息,包括登录用户和未登录用户。

我们存储未记录会话的地图是这样设置的:

  • 最大尺寸:10.000
  • 备份计数:0
  • 异步备份计数:0
  • 最大空闲:0
  • TTL:86400
  • 驱逐政策:LRU
  • 驱逐百分比:25
  • 读取备份数据:错误

使用 Mancenter 进行监控,我们看到条目数量稳定在 9.500 左右,但“条目内存”逐渐增长...... 当 Hazelcast 重新启动时,“Entries”和“Entry Memory”的值为“0”,然后当“Entries”达到 9500 的顶部时,“Entry Memory”的值为 37MB。到目前为止如此正确。 24 小时后,“条目”的数量仍然相同,因此驱逐策略运行良好,但 “条目内存”值为 160MB,并且不断增长,直到 Hazelcast 抛出 OutOfMemory 异常。

我们的配置有问题吗?似乎 GC 无法释放已删除条目的内存。

有什么想法吗?

提前致谢

【问题讨论】:

    标签: caching out-of-memory heap-memory hazelcast


    【解决方案1】:

    我天真地尝试使用 Hazelcast 作为我的主要数据存储 - 替换数据库。在我将 40K 的 1K 记录放入其中一张地图之前,一切都很好。我注意到在 ManCenter 中监控它的第一件事是它用于查询的内存量。查询后它会关闭,但我怀疑存在内存泄漏或者它保留了一些数据缓存以避免对未来查询进行反序列化。所以我确保我明确禁用了 Hazelcast 中的所有近缓存和类似的内部缓存。明确的例如便携式序列化有助于减少内存占用。也看看内部存储格式。无论如何,10K 记录的 37M 相当高,但这是保持会话/用户上下文小(低于 15K)的单独架构问题 - 仅存储相关信息。

    同样,我将它用作数据库,而不是缓存,所以我没有任何驱逐。也许那里确实存在错误(内存泄漏)。我会尝试在没有驱逐/TTL的情况下对其进行测试。

    【讨论】:

    • 在确认 Hazelcast 的内存泄漏后,我们最终将存储在 Hazelcast 中的所有数据移至 Memcached。无事可做,只能找到另一个工具。
    猜你喜欢
    • 2020-05-12
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多