zoukankan      html  css  js  c++  java
  • Spring Cloud Zuul性能调整

    Spring Cloud 版本:

    Dalston.SR5

    这两天通过JMeter测了一下Spring Cloud Zuul的性能,用的是两台虚机8核8G和4核8G,宿主机是10核逻辑20核,代理的服务简单的返回字符串hello,vm堆内存1G够用

    先说一下测试情况,值得一提的是测试并不严谨,因为用的是虚机,并且虚机上还跑了一些其它的东西,所以不能作为最终指导,仅供参考。

    8核心的情况下:

    zuul的性能约是nginx(8个worker)的75%,

    nginx 8个worker 的cup总占用率为360%(有点奇怪)

    zuul 占用750%

    4核的情况下:

    zuul大约是nginx(4个worker)性能的40%,

    nginx的cup总占用率为320%

    zuul占用380%

    奇怪的现象:

    nginx在4核下吞吐2W,8核下吞吐1W6,不增反降,具体不知道为什么(2019年1月30日追加:这是因为随着worker进程的增加,nginx的master进程调度能力跟不上了)。

    测试zuul的时候,前几次性能比较低,到后边就比较稳定和高效了,可能和JIT有关,也可能是线程创建的比较慢,线程默认寿命是一分钟。

    —————————————————————————————————分割线———————————————————————————————————————

    Zuul默认是使用信号量隔离,并且信号量的大小是100,请求的并发线程超过100就会报错

    可以调大该信号量的最大值来提高性能,配置如下:

    zuul:
      semaphore:
        max-semaphores: 5000

    也可以改为使用线程隔离,调大hystrix线程池线程大小,该线程池默认10个线程,配置如下:

    zuul:
      ribbonIsolationStrategy: THREAD
    
    hystrix:
      threadpool:
        default:
          coreSize: 100
          maximumSize: 400
          allowMaximumSizeToDivergeFromCoreSize: true
          maxQueueSize: -1
    maximumSize:最大线程数量

    allowMaximumSizeToDivergeFromCoreSize:是否让maximumSize生效,false的话则只有coreSize会生效
    maxQueueSize:线程池的队列大小,-1代表使用SynchronousQueue队列


    默认配置都可以去HystrixThreadPoolProperties和ZuulProperties这两个java文件中查找


    2018年8月31日追加:
    Zuul使用的内置容器默认是Tomcat,可以将其换成undertow,可以显著减少线程的数量,替换方式即在pom中添加以下内容:
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-undertow</artifactId>
            </dependency>




    再来一篇比较靠谱的文章:
    https://www.sohu.com/a/221110905_467759


    Spring Cloud Zuul做网关,这性能我只能说凑合,不过它提供了比nginx更多的便利。不行就多部署几个Zuul。

  • 相关阅读:
    【BZOJ5137】Standing Out from the Herd(后缀自动机)
    【BZOJ1564】【NOI2009】二叉查找树(动态规划)
    仙人掌&圆方树学习笔记
    【CF487E】Tourists(圆方树)
    【BZOJ2125】最短路(仙人掌,圆方树)
    【BZOJ4818】序列计数(动态规划,生成函数)
    【BZOJ1023】仙人掌图(仙人掌,动态规划)
    【BZOJ4316】小C的独立集(仙人掌,动态规划)
    【BZOJ4316】小C的独立集(动态规划)
    【BZOJ3240】【NOI2013】矩阵游戏(数论)
  • 原文地址:https://www.cnblogs.com/flying607/p/9186268.html
Copyright © 2011-2022 走看看