dubbo icon indicating copy to clipboard operation
dubbo copied to clipboard

泛化调用内存泄露

Open hebrd opened this issue 2 years ago • 2 comments

如下泛化调用代码,JVM内存会不断升高,不会释放,有什么建议吗?

   `ApplicationConfig` applicationConfig = new ApplicationConfig();
    applicationConfig.setName(applicationName);

    RegistryConfig registry = new RegistryConfig();
    registry.setAddress(registryAddress);
    registry.setGroup(registryGroup);
    registry.setRegister(false);
    registry.setEnableEmptyProtection(false);

    ReferenceConfig<GenericService> reference = new ReferenceConfig<>();
    reference.setInterface(interfaceName);
    reference.setGeneric("true");
    reference.setFilter(filters);
    reference.setRetries(0);
    reference.setRegistry(registry);

    GenericService srv = reference.get();
    Preconditions.checkState(srv != null, "找不到服务:" + interfaceName);

从内存快照种可以看到非常多(几百万级别)HashMap,char[],如: image image

hebrd avatar Feb 03 '23 07:02 hebrd

reference.get 之后的对象需要缓存起来。后续调用不应该会有泄漏,需要看一下是什么版本的,以及泄漏对象的到 gc root 的树。

AlbumenJ avatar Feb 03 '23 07:02 AlbumenJ

dubbo 3.1.3。做了如果缓存处理,后续有更新再反馈到这:

ReferenceCache refCache = SimpleReferenceCache.newCache();
GenericService srv =refCache.get(reference);
Object res = srv.$invoke(method, args, values);

hebrd avatar Feb 03 '23 08:02 hebrd