Проблема утечки памяти с интеграцией пружина-облако-стартер-hystrix и пружина-облако-стартер-архай

Мы используем Spring-Cloud-Starter-Hystrix с Spring-Cloud-Starter-Archaius, где мы не можем остановить поток poolingconfigurationSource Archaius, как только война не будет развернута. Но Spring-Cloud-Starter-Archaius работает нормально без Hystrix, и поток прекращается, когда война не развернута.

3 ответа

Решение
**Issue resolved permanently.**

**There are 2 approach :**
1) Create ContextListener in Servlet and in destroy method , copy below code.

2) If you are using Histrix + Spring Boot + Archaius then on main spring application java file , copy below code in method annonated with @PreDestory annotations.

    **Solution :**

    try {
    if (ConfigurationManager.getConfigInstance() instanceof DynamicConfiguration) {
    DynamicConfiguration config = (DynamicConfiguration) ConfigurationManager.getConfigInstance();
    config.stopLoading();
    } else if (ConfigurationManager.getConfigInstance() instanceof ConcurrentCompositeConfiguration) {
    ConcurrentCompositeConfiguration configInst = (ConcurrentCompositeConfiguration) ConfigurationManager
    .getConfigInstance();
    List<AbstractConfiguration> configs = configInst.getConfigurations();
    if (configs != null) {
    for (AbstractConfiguration config : configs) {
    if (config instanceof DynamicConfiguration) {
    ((DynamicConfiguration) config).stopLoading();
    break;
    }
    }
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    } 

Попробуйте переустановить Hystrix до закрытия приложения Spring.

@EnableCircuitBreaker
@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

  @PreDestroy
  public void cleanUp() {
    Hystrix.reset();
  }

}

И Дэвин, и Ашиш Патель правы: из-за весеннего облака произошли многочисленные утечки.

Наличие некоторых потоков с именем pollingConfigurationSource может быть частично исправлено решением, предложенным Давиным. Вы также должны убедиться, что ни один файл не назван config.properties в вашем классе, потому что com.netflix.config.sources.URLConfigurationSource (ищите в источнике все случаи), найдите общий патч и запустите ветвь exectutor. в коде есть несколько путей, которые приводят к запуску executorservice в потоке "pollingConfigurationSource" (который не всегда останавливается). В моем случае удаление "config.properties" решило эту утечку

Другая известная мне утечка вызвана Hystrix/RjJava. Вместо звонка Histrix.reset вызов rx.schedulers.Schedulers.shutdown(); это заставит потоки "RxIoScheduler-" выйти.

Другие вопросы по тегам