Zuul网关调优「建议收藏」

Zuul网关调优「建议收藏」网关的大部分工作是请求转发,属于IO密集型的应用,我们要在有限的资源的情况下结合公司实际请求场景做调优。一,容器选择在容器方面,undertow的呼声很高,一个是他很轻量级的,其次他属于java开发,性能也很好,笔者根据实际情况对tomcat和undertow做了一个对比默认配置下,8核cpu,tomcat启动后会初始化10个io线程,而undertow会初始化72个线程,8个IO线程,64个work线程(8*8)性能对比:写一个接口,接口中什么也不做,就睡眠2s请求个数


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

网关的大部分工作是请求转发,属于IO密集型的应用,我们要在有限的资源的情况下结合公司实际请求场景做调优。

一,容器选择

在容器方面,undertow的呼声很高,一个是他很轻量级的,其次他属于java开发,性能也很好,笔者根据实际情况对tomcat和undertow做了一个对比

默认配置下,8核cpu,tomcat启动后会初始化10个io线程,而undertow会初始化72个线程,8个IO线程,64个work线程(8*8)

性能对比:写一个接口,接口中什么也不做,就睡眠2s

请求个数 tomcat tomcat(max-threads:100) undertow
50 平均耗时(ms): 2241 2241 2321
线程个数: 93 93 105
内存 94 133
100 平均耗时(ms): 2231 2021 2517
线程个数: 143 138 105
内存
200 平均耗时(ms): 2424 2788 3884
线程个数: 238 138 105
内存
300 平均耗时(ms): 3596 3753 5454
线程个数: 238 138 105
内存
400 平均耗时(ms): 3427 4623 6865
线程个数: 238 138 105
内存

从对比来看,就初始化来看,tomcat最初只初始化10个线程,而undertow则会初始化所有的线程

性能来看,tomcat也是要占优势的

tomcat 比undertow要灵活,适应高峰和低谷也比较强

二,hystrix隔离方式

zuul默认的是信号量方式,也就是控制进来的请求总量,可以全局配置,也可以配置单个服务的最大信号量,还有一种方式是线程隔离,每种路由方式会创建单独的线程池,这样的好处是一个服务的影响不会扩散到其他的服务,但是在资源有限,且服务有限的情况下,还是信号量合适,这样我们可以充分利用tomcat创建的线程池,而不用创建过多的hystrix线程池

三:ribbon相应时间:

在默认的情况下,ribbon很容易就会报错,比如read timeout等,可以通过

ribbon:
  ReadTimeout: 60000
  ConnectTimeout: 10000
  MaxAutoRetries: 1
  MaxAutoRetriesNextServer: 1

来控制,但是如果设置过长也会导致长时间的等待,建议60比较合适

四:httpclient选择

zuul默认是Appache Httpclient,呼声比较高的是okhttp

但是经过测试,okhttp的性能更好,所以可以通过

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
</dependency>

引入okhttp并在ribbon中配置:

ribbon:
  httpclient:
    enabled: false
  okhttp:
    enabled: true

五:超时配置

使用zuul时,一共有三个超时参数

1.zuul.host.socket-timeout-millis和zuul.host.connect-timeout-millis这个超时是指在使用url路由时,则使用这里的超时,ribbon配置的超时将不会生效

2.ribbon.ReadTimeout 和ribbon.ConnectTimeout这个就是服务名路由时的超时

3.hystrix.command.execution.isolation.thread.timeoutMilliseconds这个超时在线程隔离的模式下是hystrix的熔断超时,应该大于ribbon和zuul的超时,还需加上重试的时间,在信号量隔离模式下是信号量的释放时间,也就是说如果你这里配置2 ,但是接口执行时间是5s,那么到了2秒后依然会释放信号量

还有一点需要注意的是hystrix.command.default.circuitBreaker.requestVolumeThreshold默认是20,也就是说如果熔断器失败了20个后就会开启CIRCUIT_OPEN模式这个也需结合实际情况来进行配置

六:jvm参数

根据目前dev环境情况(没有数据),以及本地测试(使用jmeter提交400个请求),网关一般情况下对内存使用为80M左右,老年代为36M左右,元数据空间为63M左右,可以保守设置为堆内存代销为300M,年轻代150M, 老年代150M,

而默认情况下,NewRatio=2 ,  而在JVM的默认参数中MetaspaceSize=21M , 这样会导致前期jvm调整metaspacesize大小并发生fullgc所以咱们可以设置一下jvm参数

-Xms300m -Xmx300m -XX:NewRatio=1 -XX:MetaspaceSize=100m

该配置下程序启动发生YGC :4   FGC : 0    堆中 E:80M , T : 0 M , F : 19M , O:9M ,Me:56M 

连续发起1600次请求后:YGC:10  FGC: 0    堆中:E:71M , T:0M , F : 10M, O:34M , Me: 62M

后期可根据生产实际情况调整大小

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170623.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • json转换对象失败_java对象转json字符串

    json转换对象失败_java对象转json字符串com.fasterxml.jackson.databind.JsonMappingException:Cannotconstructinstanceofcom.huasisoft.egAffairs.JsonResult:nosuitableconstructorfound,cannotdeserializefromObjectvalue没有无参构造函数,再j…

    2022年10月29日
  • layui表单提交数据_vue表单值无变化不让提交

    layui表单提交数据_vue表单值无变化不让提交layui标准的提交<formclass=”layui-form”action=””><divclass=”layui-form-item”><divclass=”layui-input-block”><buttonclass=”layui-btn”lay-submitlay-f…

    2022年10月7日
  • tensorflow2.2_实现Resnet34_花的识别[通俗易懂]

    tensorflow2.2_实现Resnet34_花的识别[通俗易懂]残差块    Resnet是由许多残差块组成的,而残差块可以解决网络越深,效果越差的问题。    残差块的结构如下图所示。其中:weightlayer表示卷积层,用于特征提取。F(x)F(x)F(x)表示经过两层卷积得到的结果。xxx表示恒等映射。F(x)+xF(x)+xF(x)+x表示经过两层卷积后与之前的卷积层进行结合。所以F(x)F(x)F(x)和xxx代表的是相同的信号。作用:将浅层网络的信号递给深层网络,使网络得到更好的结果。批量归一化(BatchNormaliz

    2022年9月28日
  • 框架梳理|企业大数据管理之道「建议收藏」

    框架梳理|企业大数据管理之道「建议收藏」大数据管理——企业转型升级与竞争力重塑之道》一书,从大数据驱动决策、大数据优化管理、大数据智慧营销、大数据发现创新、大数据推动转型、大数据保障安全六个维度全面分析了大数据对传统企业的应用价值,提供可借鉴的案例和深度有格局的思考。本文主要讲述的就是对于这本书的个人看法。

    2022年5月1日
  • javascript 取整,取余数

    javascript 取整,取余数1.丢弃小数部分,保留整数部分parseInt(5/2)22.向上取整,有小数,则整数部分加1Math.ceil(5/2)33.四舍五入Math.round(5/2)34.向下取整Math.floor(5/2)2取余数0%401%412%42

    2022年6月21日
  • 数据增强英文_数据加噪处理

    数据增强英文_数据加噪处理文章目录0.前言1.Cutout1.1.要解决什么问题1.2.用了什么方法1.3.效果如何1.4.还存在什么问题&可借鉴之处2.RandErasing2.1.要解决什么问题2.2.用了什么方法2.3.效果如何2.4.还存在什么问题&可借鉴之处3.Mixup3.1.要解决什么问题3.2.用了什么方法3.3.效果如何3.4.还存在什么问题&可借鉴之处4.Cutmix4.1.要解决什么问题4.2.用了什么方法4.3.效果如何4.4.还存在什么问题

    2022年9月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号