Hazelcast客户端内存泄漏

时间:2018-12-14 11:14:57

标签: memory client hazelcast

我们有Spring Boot 2.0.4应用程序。我们使用分布式Hazelcast 3.11缓存。在我们的应用程序中,我们配置了HazelcastClient,该客户端连接到Docker容器中的Hazelcast服务器。

在缓存中,我们在一张地图中存储不同的“人物”,而在同一张地图中存储相同的“人物”(通过一个键在一个列表中存储约900个人,这两个地图中的这些人100%不相同,他们都描述了现实生活中的人,但列表中的最后一个人的属性较少。)所有的图都是BINARY类型的。

当我们进行压力测试以从缓存(第一张地图)中通过随机ID获取人员时,一切都变得非常好。 5000个并发请求根本不影响我们的应用程序HEAP,而10000个则略有影响。 JSON格式的一个人详细信息的大小为10kB。

当我们进行压力测试以从缓存(第二张地图)中获取人员列表时,我们在配置了客户端的应用程序的HEAP中遇到了问题。我们仅发出500个并发请求,而HEAP增长到4Gb! JSON格式的列表大小为800kB。它存储在第二张地图中,并且被同一密钥请求了500次。

有人知道发生了什么吗?

DTO

Controller

Method of a Facade which is retrieved from the Controller, and where caching takes place via @Cacheable annotation

HazelcastInstance configuration

hazelcast.xml configuration for the server side

500 concurrent requests (3 times in a row)

Heap, Classes

已更新:

我连续23次发出了500个并发请求。下面我们可以看到测试的最后几分钟。

Telemetries Overview

1 个答案:

答案 0 :(得分:0)

@Nicolay,如果我错了,请纠正我:

  • 第二张地图包含约900人的条目列表。您提到每个人都是〜10KB,所以第二张地图中的每个条目都是〜9MB,即使您说的是Json格式的800KB。您能通过Hazelcast检查第二张地图中条目的大小吗?像:client.getMap(map_name).getEntryView(key).getCost()。这将使您以字节为单位的条目存储成本。

  • 500个并发请求(如果每个条目大约为9MB)将需要4.5GB的额外堆,这与您观察到的相符。

从数字上看,除了Json大小为800KB以外,其他一切似乎都很好。

您可以检查这些数字吗?