描述错误
创建ServiceBusReceiverAsyncClient
的实例时,会创建两个LockContainer
实例字段。
每个变量(在LockContainer
的构造函数中)订阅 Flux 以定期清理资源。 清理中使用的 lambda 使用锁容器实例本身,因此 Flux 将继续引用锁容器实例,直到消费者被释放。
问题是当ServiceBusReceiverAsyncClient
关闭时, LockContainer
变量不会也被关闭,这会导致内存泄漏。
再现
为了重现创建ServiceBusReceiverAsyncClient
实例并重复调用close
和start
。 使用 Visual VM 以通过堆转储跟踪内存使用情况。
这是您应该看到的内存使用模式(内存使用略有但稳定的增加):
这就是堆中实例的数量及其保留大小在时间上的样子:
预期行为
LockContainer 实例应该在客户端关闭时关闭,因此不会泄漏到内存中。
设置(请填写以下信息):
信息清单
请确保您已添加以上所有以下信息并勾选必填字段,否则我们会将发行人视为不完整的报告
感谢您检查 PR @conniey ! 我们可以期待很快发布新版本吗? 此致!
@marciopd我们将在 1 月发布。
由 #17993 修复