2

设置:

  • 榛树:3.12.3
  • 春季启动:2.1.6
  • 爪哇:1.8
  • 参数:-XX:+UseG1GC
  • Xms7g -Xmx7g 这些在 Docker 中运行:openjdk:8
  • 它们在专用的 vmware 节点 CentOS 7.5.1804 中运行

我总共有 7 个节点组成了一个 hazelcast 集群。其中5人是CP成员。组大小设置为 3。其他值得注意的配置更改:setSessionTimeToLiveSeconds(200)、setMissingCPMemberAutoRemovalSeconds(240)。

用法:我有 8 个客户端尝试获取 Long key 的防护锁,接口缓存 5 分钟。键几乎总是不同的,但在某些情况下,我们会收到同一个键的许多操作,我们希望避免这些键的异步更新。过去我为此使用 IMap,但我注意到它并不总是尊重锁。Fenced 锁在达到一定的内存使用率之前似乎表现得非常好。

问题:我观察到一个 cp 成员被大量使用,并且 G1 Old Gen 堆随着时间的推移而略微增加。一天之内就达到了 5GB。即使在我停止锁定请求之后,内存也永远不会被清除。 在此处输入图像描述

我尝试创建两个组以利用集群中的更多节点,它确实有帮助,但问题仍然存在,一些节点上的已用堆随着时间的推移而增加,并且有时它们变得非常慢。

问题:我做错了什么?这甚至是该工具的有效用例吗?

4

1 回答 1

2

锁对象不会自行过期,Hazelcast 不会自动对未使用的锁执行垃圾回收。如果您不再需要锁,您可以使用 销毁它lock.destroy(),否则您将面临运行 OOME 的风险。

于 2019-11-20T04:21:27.627 回答