1. 程式人生 > >Spring Cloud Zuul性能調整

Spring Cloud Zuul性能調整

靠譜 code 不能 prop work cor targe 部署 sync

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,不增反降,具體不知道為什麽。

測試zuul的時候,前幾次性能比較低,到後邊就比較穩定和高效了,可能和JIT有關,也可能是線程創建的比較慢,線程默認壽命是一分鐘。

—————————————————————————————————分割線———————————————————————————————————————

Zuul默認是使用信號量隔離,並且信號量的大小是100,請求的並發線程超過100就會報錯

可以調大該信號量的最大值來提高性能,配置如下:

zuul:
  semaphore:
    max-semaphores: 5000

也可以改為使用線程隔離,調大hystrix線程池線程大小,該線程池默認10個線程,配置如下:

zuul:
  ribbonIsolationStrategy: THREAD

hystrix:
  threadpool:
    default:
      coreSize: 100
      maximumSize: 5000
      allowMaximumSizeToDivergeFromCoreSize: true
      maxQueueSize: -
1
maximumSize:最大線程數量

allowMaximumSizeToDivergeFromCoreSize:是否讓maximumSize生效,false的話則只有coreSize會生效
maxQueueSize:線程池的隊列大小,-1代表使用SynchronousQueue隊列


默認配置都可以去HystrixThreadPoolProperties和ZuulProperties這兩個java文件中查找




再來一篇比較靠譜的文章:
https://www.sohu.com/a/221110905_467759


Spring Cloud Zuul做網關,這性能還算過得去,畢竟它提供了比nginx更多的便利。不行就多部署幾個Zuul,Zuul一般不會成為瓶頸。

Spring Cloud Zuul性能調整