【问题标题】:Hazelcast Client Memory LeakHazelcast 客户端内存泄漏
【发布时间】:2019-05-15 15:55:37
【问题描述】:

我们有 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

【问题讨论】:

  • 看起来您对第二张地图的并发请求返回了大量数据,因为每个请求都返回整个人员列表。要了解您是否面临内存泄漏,您需要使用相同数量的并发请求继续压力测试一段时间。如果您最终得到OutOfMemoryError,那么某处可能存在内存泄漏。您能否按照我的描述进行压力测试并分享结果?
  • 当然,没问题
  • AlparslanAvci,我刚刚用测试的截图更新了我的问题
  • @AlparslanAvci,如您所见,OOME 并没有发生。有什么想法吗?

标签: memory client hazelcast


【解决方案1】:

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

  • 第二张地图包含约 900 人的人员列表作为条目。您提到每个人约为 10KB,因此第二张地图中的每个条目约为 9MB,即使您说它是 Json 格式的 800KB。您能否通过 Hazelcast 检查第二张地图中条目的大小。喜欢:client.getMap(map_name).getEntryView(key).getCost()。这将为您提供以字节为单位的入口内存成本。

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

通过查看数字,一切似乎都很好,除了 Json 大小为 800KB。

你能检查一下这些数字吗?

【讨论】:

  • 两张地图中的这些人 100% 不一样。两者都描述了现实生活中的人,但列表中的最后一个具有较少的属性。我还尝试遵循您的建议并尝试评估 client.getMap(map_name).getEntryView(key).getCost() 但无法通过键获取条目,尽管我看到了所有值地图:map with different personsnull when try to retrieve a value by a key
  • 今天我在不同的 PC 上运行压力测试(使用更好的处理器、i7-6700 和 Windows 10)。令人惊讶的是,测试看起来非常好!堆几乎没有增长,提交的堆内存大小仅为 670 MB。然后我继续处理 1000 个并发请求,之后是 2000 个,堆是一样的! The stress test is here.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多