reactor.core.publisher.FluxPublishOn $ PublishOnSubscriber导致内存泄漏

时间:2018-06-04 06:26:45

标签: java spring

我们有一个使用Spring Boot的应用程序。应用程序公开一个Rest端点(不使用Spring WebFlux框架)。该应用程序调用几个昂贵的bacend API并缓存响应,以便将来在我们需要时可以从Cache获取APi响应。我们希望并行调用和缓存每个Backend API响应。因此我们使用了来自服务类的Spring Reactor Flux。

我们有一个界面,它的用途如下

public interface CacheCreator {
void callAndCreateCache (final String arg1, final String arg2)
}


final Flux<CacheCreator> cacheCreators = Flux.fromIterable(cacheCreatorList);
final int parallelism = cacheCreatorList.size();
cacheCreatorFlux
  .parallel(parallelism)
  .runOn(Schedulers.parallel())
  .subscribe(cacheCreator -> cacheCreator.callAndCreateCache(ar1, arg2));

问题: 从功能上讲,这是按预期工作的。但是在负载测试时,这会导致内存泄漏。堆转储分析(Eclipe Memory Analyzer)说

&#34; reactor.core.publisher.FluxPublishOn $ PublishOnSubscriber&#34;的92,844个实例,由&#34; org.springframework.boot.loader.LaunchedURLClassLoader @ 0xfffffff8bac20830&#34;加载占用148,550,400(48.58%)个字节。 关键词 reactor.core.publisher.FluxPublishOn $ PublishOnSubscriber org.springframework.boot.loader.LaunchedURLClassLoader @ 0xfffffff8bac20830

30,987个&#34; reactor.core.publisher.ParallelSource $ ParallelSourceMain&#34;的实例,由&#34; org.springframework.boot.loader.LaunchedURLClassLoader @ 0xfffffff8bac20830&#34;加载占用59,693,912(19.52%)字节。

关键字 reactor.core.publisher.ParallelSource $ ParallelSourceMain org.springframework.boot.loader.LaunchedURLClassLoader @ 0xfffffff8bac20830

Spring Boot版本: 2.0.2 RELEASE

Webserver: Tomcat(默认使用Spring Boot)

操作系统:Solaris

在Flux实施方面,我有什么基本的缺失吗?有人可以建议为什么这些对象留在堆中并且多个完整的GC无法清除它吗? enter image description here

0 个答案:

没有答案