SpringBoot服務器壓測對比(jetty、tomcat、undertow)

(麻煩看這篇的大大們,穿越到這https://my.oschina.net/shyloveliyi/blog/2980868)git

一、本次對比基礎環境信息以下:github

    springboot版本1.5.10spring

    centos虛機4c6G,版本7.4數據庫

    centos實機2u16c40G,版本7.4,虛機運行在實機上json

    ab版本2.3centos

    jprofiler版本9.1.1tomcat

二、壓測接口說明springboot

    天花板:指的是一個空接口,沒有任何實現,直接返回,如服務器

@RequestMapping(value = "/test", method = RequestMethod.GET)
public void test() {
		
}

    服務接口:指的是具備必定業務代碼的接口,鏈接數據庫/Redis而後返回json數據mvc

    異步接口:指的是開啓了http異步

三、壓測過程

    JETTY

    先以Jetty開始,這裏經過優化參數來不斷摸底。如下是參數說明:

        jettyMin:最小鏈接數

        jettyMax:最大鏈接數

        mvcCore:線程池core數量

        mvcMax:線程池最大量

        mvcQueue:線程池隊列大小

    大體結果以下:

JETTY天花板(無異步)
jettyMin 50 100 200 300
jettyMax 600 600 600 600
mvcCore 50 50 50 50
mvcMax 200 200 200 200
mvcQueue 100 100 100 100
結果 2090 2116 2374 2100

 

JETTY天花板(無異步)
jettyMax 400 600 800
jettyMin 200 200 200
mvcCore 50 50 50
mvcMax 200 200 200
mvcQueue 100 100 100
結果 1655 2170 2000
JETTY天花板(異步)
jettyMax 600 600 600
jettyMin 200 200 200
mvcCore 50 100 200
mvcMax 200 200 200
mvcQueue 100 100 100
結果 1500 1600 1450

 

JETTY天花板(異步)
jettyMax 600 600 600
jettyMin 200 200 200
mvcCore 100 100 100
mvcMax 200 400 600
mvcQueue 100 100 100
結果 1600 1700 1550
JETTY天花板(異步)
jettyMax 600 600 600
jettyMin 200 200 200
mvcCore 100 100 100
mvcMax 400 400 400
mvcQueue 100 200 300
結果 1600 1700 1600

     如下是經過工具預估最佳線程數,而後修改優化參數的結果:

JETTY天花板(無異步)
jettyMax 600 52  
jettyMin 200 52  
mvcCore 52 52  
mvcMax 52 52  
mvcQueue 199 199  
結果 1520 1600  
JETTY業務接口(異步)
jettyMax 600    
jettyMin 200    
mvcCore 52    
mvcMax 52    
mvcQueue 199    
結果 1719    
JETTY業務接口(無異步)
jettyMax 600    
jettyMin 200    
mvcCore 52    
mvcMax 52    
mvcQueue 199    
結果 2000    

    經過以上結果發現一個問題,開啓異步HTTP後壓測的結果均不如不開啓HTTP異步的結果。

    TOMCAT

    經過切換成tomcat再按照以上過程壓測,發現HTTP和tomcat纔是天生一對,組合壓測下的結果和Jetty不開啓異步的結果差很少。這裏再也不重複貼出數據表格。

    UNDERTOW

    經過Jetty和tomcat的壓測結果發現,HTTP異步並不必定會提高程序性能,只有在特定的條件下才會起到正面的效果,如應用服務器爲非NIO時。而undertow和jetty同樣是NIO,因此這裏再也不對比異步非異步,直接只測非異步。優化參數只有兩個:

    ioThreads:cpu核數

    workerThreads:工做線程數(能夠經過工具預估出來)

    如下是數據。

UNDERTOW業務接口(無異步)
ioThreads 4    
workerThreads 52    
       
       
       
結果 2200    
UNDERTOW天花板(無異步)
ioThreads 4    
workerThreads 52    
       
       
       
結果 3100    

    四、jprofiler圖標對比

    jetty

    tomcat

        UNDERTOW

五、附最佳線程數預估工具

    GITHUB地址https://github.com/sunshanpeng/dark_magic  原文博客:http://ifeve.com/how-to-calculate-threadpool-size/

    Undertow使用&優化:https://www.jianshu.com/p/e625b8aa0e80

相關文章
相關標籤/搜索