【问题标题】:Resilience4j Retry - Memory consumptionResilience4j 重试 - 内存消耗
【发布时间】:2021-11-20 23:56:16
【问题描述】:

我正在将弹性 4j 与 Spring Boot 2.x 一起使用 使用 Retry 和断路器模块对内存和 cpu 有什么影响?

如果我有 2000 个事件/秒传入每个负载大约 10Mb,并且我将重试的等待持续时间保持为 15 秒,指数退避乘数为 2,那么内存影响是什么? 我有 8Gb 的应用程序内存

【问题讨论】:

    标签: resilience4j resiliency resilience4j-retry


    【解决方案1】:

    最好的方法是使用像 VisualVM 这样的配置文件来监控您的应用程序。然后你就可以知道瓶颈在哪里了。

    我知道重要的一件事是创建断路器实例的位置。最后有一个收集器可以删除未使用的实例。但在你的情况下,不要将断路器的创建放在像here这样的get方法上似乎是个好主意

    @Service
    public static class DemoControllerService {
        private RestTemplate rest;
        private CircuitBreakerFactory cbFactory;
        public DemoControllerService(RestTemplate rest, CircuitBreakerFactory cbFactory) {
            this.rest = rest;
            this.cbFactory = cbFactory;
        }
        public String slow() {
            return cbFactory.create("slow").run(() -> rest.getForObject("/slow", String.class), throwable -> "fallback");
        }
    }
    

    但是在构造函数上创建熔断器。

    @Service
    public class DemoControllerService {
        private RestTemplate restTemplate = new RestTemplate();
        private CircuitBreakerFactory circuitBreakerFactory;
        private CircuitBreaker circuitBreaker;
    
        @Autowired
        public DemoControllerService(CircuitBreakerFactory circuitBreakerFactory) {
            this.circuitBreakerFactory = circuitBreakerFactory;
            this.circuitBreaker = circuitBreakerFactory.create("circuitbreaker");
        }
    

    还有关于为每个host 放置一个断路器的讨论。您可以做的其他事情是自己remove the instance of the Registry,而不是等待将来的断路器组件。

    registry.remove(circuitBreakerName);
    

    Here 也是一个关于清理注册表内存的讨论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2012-11-24
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多