Spring Cloud Gateway中netty线程池优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Gateway中netty线程池优化相关的知识,希望对你有一定的参考价值。

参考技术A 最近测试同学对系统进行压测。报出一个问题:几乎所有接口的成绩都不太好。甚至一些仅仅是主键查询,并且数据量不大的接口也是如此。排查过程中:跳过gateway网关,直接通过目标服务器ip进行压测发现成绩提升明显。初步判断是网关问题。网上翻阅资料发现一个优化点,就是netty本身的线程池配置。

要设置起本身可同时工作的线程数需要设置netty中的 reactor.netty.ioWorkerCount 参数。该参数无法直接配置,需要通过 System.setProperty 设置,故我们可以创建以下配置类来配置该参数:

我这里版本是 reactor-netty-core-1.0.3 ,版本不一样的话 可能参数key不太一样。可以看一下LoopResources 中写的key。

Runtime.getRuntime().availableProcessors() 获取的是cpu核心线程数也就是计算资源,而不是CPU物理核心数,对于支持超线程的CPU来说,单个物理处理器相当于拥有两个逻辑处理器,能够同时执行两个线程。

接下来看一下 DefaultLoopResources做了什么

可以看出来,如果未配置。netty是没有select线程组的。结合分析reactor模型可以发现,这种情况对处理效率是有影响的。而且最大只和cpu核心数量相同的配置也明显无法重复利硬件用资源。

spring cloud gateway 报错 Unable to find GatewayFilterFactory with name

参考技术A Unable to find GatewayFilterFactory with name xxx
原因是过滤器名称导致的...
spring 约定过滤器类名"xxx"+GatewayFilterFactory,其中"xxx"为配置中的name;

改成

改成

以上是关于Spring Cloud Gateway中netty线程池优化的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud gateway 如何工作

聊聊spring cloud gateway的NettyConfiguration

spring cloud gateway 报错 Unable to find GatewayFilterFactory with name

Spring Cloud实战Spring Cloud GateWay服务网关

Spring Cloud Gateway集成

如何在 spring-cloud-gateway 合约测试中从 spring-cloud-contract 中设置带有 StubRunner 端口的 url