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

1、本次對比基礎環境信息如下:

    springboot版本1.5.10

    centos虛機4c6G,版本7.4

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

    ab版本2.3

    jprofiler版本9.1.1

2、壓測接口說明

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

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

    服務接口:指的是具有一定業務代碼的接口,連接數據庫/Redis然後返回json數據

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

3、壓測過程

    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    

    4、jprofiler圖標對比

    jetty

    tomcat

        UNDERTOW

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章