ElasticSearch Java TransportClient 泄漏字节[]

Thi*_*yão 5 java elasticsearch

ElasticSearch Java TransportClient 5.5.1似乎正在泄漏字节数组。即使我只是连接并关闭,在中间评论代码,它也会泄漏。

编码:

try (PreBuiltTransportClient preBuiltTransportClient = new PreBuiltTransportClient(settings)) {
     try(TransportClient transportClient=preBuiltTransportClient.addTransportAddress(
            new InetSocketTransportAddress(InetAddress.getByName(endPoint),javaPort))){
         //do something
     }
}
Run Code Online (Sandbox Code Playgroud)

插件加载日志(可能表明一些东西):

加载的插件日志 VisualVM 堆转储显示在堆上分配的字节 [] 大小(强制垃圾回收后):

可视化虚拟机

似乎与此处发布的问题相同:https : //discuss.elastic.co/t/are-there-memory-leaks-in-elasticsearchs-transportclient-5-4-3-or-is-my-code-有缺陷/91989/5

不确定是否相关,但我在同一个项目中使用 Spring boot。

有任何想法吗?

编辑:

似乎与压缩有关:

在此处输入图片说明

编辑2:

TransportClientNodesService.addTransportAddresses 上的内存消耗大大增加

Thi*_*yão 1

解决方案在这里: https ://github.com/elastic/elasticsearch/issues/26048

这不是泄漏,而是来自网络池分配器。

设置 io.netty.allocator.type=unpooled 禁用。

System.setProperty("io.netty.allocator.type", "unpooled");
Run Code Online (Sandbox Code Playgroud)

或者

-Dio.netty.allocator.type=unpooled 
Run Code Online (Sandbox Code Playgroud)