我们使用Hazelcast 3.3.5的独立单节点安装来存储一些用户的会话信息,包括已记录和未记录的用户。
我们存储未记录会话的地图设置如下:
使用Mancenter进行监控,我们发现条目数量在9.500左右稳定,但是"条目记忆"逐渐成长...... 当Hazelcast重新启动时,"条目"和"进入记忆"值是" 0"然后当"参赛作品"达到9500"入门记忆"的顶部价值是37MB。到目前为止如此严谨。 24小时后,"条目"仍然是一样的,所以驱逐政策工作正常,但"进入记忆"价值是160MB 并且一直在增长,直到Hazelcast抛出OutOfMemory异常。
我们的配置有问题吗?似乎GC无法释放已删除条目的内存。
有什么想法吗?
提前致谢
答案 0 :(得分:1)
我天真地尝试使用Hazelcast作为我的主要数据存储 - 替换数据库。一切都很好,直到我将40K的1K记录放入其中一张地图中。我注意到在ManCenter中监控它的第一件事是它用于查询的内存量。它在查询后出现故障,但我怀疑存在内存泄漏或者它会保留一些数据以避免将来的查询反序列化。所以我确保在Hazelcast中明确禁用了所有近缓存和类似的内部缓存。明确的,例如便携式序列化有助于减少内存占用。看一下内部存储格式。无论如何,37K的10K记录相当高,但这是一个单独的架构问题,即保持会话/用户上下文很小(低于15K) - 只存储相关信息。
同样,我将它用作数据库,而不是缓存,所以我没有任何驱逐。也许确实存在一个错误(内存泄漏)。我试着在没有驱逐/ TTL的情况下测试它。