1. 程式人生 > >SpringBoot伺服器壓測對比(jetty、tomcat、undertow)

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