0

我在 Spring Boot 2.x 中使用 Resilience4j 使用 Retry 和断路器模块对内存和 cpu 有什么影响?

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

4

1 回答 1

0

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

我知道重要的一件事是创建断路器实例的位置。最后有一个收集器可以删除未使用的实例。但在您的情况下,不要将断路器的创建放在 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");
    }

也有讨论为每个主机放置一个断路器。您可以做的其他事情是自己删除注册表的实例,而不是等待将来的断路器组件罗马它。

registry.remove(circuitBreakerName);

这里还有一个关于清理注册表内存的讨论。

于 2021-09-29T19:41:14.693 回答