Hystrix的高内存使用量超过1000条命令

在服务中使用1000条以上Hystrix命令时,我发现内存使用率很高。

用例:

  • 服务进行REST调用。
  • 每个REST端点可以接收数千个呼叫。端点行为异常时需要断路。
  • 可能有成千上万个(上限15000个)这样的REST端点(每个端点在不同的域中)。
  • 这些REST端点之间没有公共组密钥。

我能够为大约10,000个唯一命令获得大约1 GB的内存使用量,但没有任何更少的地方。这是我正在使用的设置。如您所见,我几乎关闭了延迟指标。还有什么我可以减少内存占用的方法吗?我非常希望能够从缓存中踢出一些旧的HystrixCircuitBreaker实例,但是看不到任何实现方法。我计划代替UUID.randomUUID()传递调用方的上下文。

Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("BookreaderCommand"))
                    .andCommandKey(HystrixCommandKey.Factory.asKey("ReadBooks" + UUID.randomUUID()))
                    .andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.defaultSetter()
                            .withMaxQueueSize(20))
                    .andCommandPropertiesDefaults(HystrixCommandProperties.defaultSetter()
                            .withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE)
                            .withExecutionIsolationSemaphoreMaxConcurrentRequests(1)
                            .withCircuitBreakerSleepWindowInmilliseconds(300000)
                            .withExecutionTimeoutInmilliseconds(1000)
                            .withCircuitBreakerEnabled(true)
                            .withCircuitBreakerRequestVolumeThreshold(1)
                            .withCircuitBreakerErrorThresholdPercentage(100)
                            .withMetricsRollingStatisticalWindowInmilliseconds(1000)
                            .withMetricsRollingStatisticalWindowBuckets(1)
                            .withMetricsRollingPercentileEnabled(false) // Percentile not enabled.
                            .withMetricsRollingStatisticalWindowInmilliseconds(1000)
                            .withMetricsRollingPercentileWindowBuckets(1)
                            .withMetricsHealthsnapshotIntervalInmilliseconds(1000)),
shwgy123 回答:Hystrix的高内存使用量超过1000条命令

看起来像这样。 Hystrix文档建议,具有超过1000个唯一CommandKey值的电路可能会导致较高的内存使用率。

https://github.com/Netflix/Hystrix/blob/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCommand.java#L212

那些寻找替代品的人可以考虑一下复原力4J https://resilience4j.readme.io/docs/circuitbreaker

本文链接:https://www.f2er.com/2768325.html

大家都在问