【发布时间】: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 次。
有人知道发生了什么吗?
HazelcastInstance configuration
hazelcast.xml configuration for the server side
500 concurrent requests (3 times in a row)
更新:
我连续 23 次发出 500 个并发请求。下面我们可以看到测试的最后几分钟。
【问题讨论】:
-
看起来您对第二张地图的并发请求返回了大量数据,因为每个请求都返回整个人员列表。要了解您是否面临内存泄漏,您需要使用相同数量的并发请求继续压力测试一段时间。如果您最终得到
OutOfMemoryError,那么某处可能存在内存泄漏。您能否按照我的描述进行压力测试并分享结果? -
当然,没问题
-
AlparslanAvci,我刚刚用测试的截图更新了我的问题
-
@AlparslanAvci,如您所见,OOME 并没有发生。有什么想法吗?