服务正常,接口并发量大时,网关抛出503异常。(解决)

136 阅读1分钟

问题:页面请求同一服务接口过多,导致并发量大,网关接收到大量请求后,部分接口直接返回503? 解决方案:# Spring Cloud Hystrix 线程池配置不正确,导致请求被熔断。

参考配置:

coreSize线程池coreSize默认值:10设置标准:qps*99meantime+breathing room
maximumSize此属性设置最大线程池大小。 这是在不开始拒绝HystrixCommands的情况下可以支持的最大并发数。 请注意,此设置仅在您还设置allowMaximumSizeToDivergeFromCoreSize时才会生效。默认值:10
maxQueueSize请求等待队列默认值:-1如果使用正数,队列将从SynchronizeQueue改为LinkedBlockingQueue
queueSizeRejectionThreshold此属性设置队列大小拒绝阈值 - 即使未达到maxQueueSize也将发生拒绝的人为最大队列大小。 此属性存在,因为BlockingQueue的maxQueueSize不能动态更改,我们希望允许您动态更改影响拒绝的队列大小。默认值:5注意:如果maxQueueSize == -1,则此属性不适用。
keepAliveTimeMinutes此属性设置保持活动时间,以分钟为单位。默认值:1
allowMaximumSizeToDivergeFromCoreSize此属性允许maximumSize的配置生效。 那么该值可以等于或高于coreSize。 设置coreSize <maximumSize会创建一个线程池,该线程池可以支持maximumSize并发,但在相对不活动期间将向系统返回线程。 (以keepAliveTimeInMinutes为准)默认值:false
metrics.rollingStats.timeInMilliseconds此属性设置statistical rolling窗口的持续时间(以毫秒为单位)。 这是为线程池保留多长时间。默认值:10000
metrics.rollingStats.numBuckets此属性设置滚动统计窗口划分的桶数。 注意:以下必须为true - “metrics.rollingStats.timeInMilliseconds%metrics.rollingStats.numBuckets == 0” -否则将引发异常。默认值:10