7
Java Servlet Container 效能比較 (/z/zone)
IngramChen 積分 8 編輯於

有點離題.. 不過我還是說說心得好了。你這份的結果跟我最近測的差不多,我有測純 container 的部份,但也有追加跑應用程式時的實測,大致上來說分幾層:

  1. servlet container 現在都很快,不論是 tomcat/jetty/nio... 什麼的組合。如你的測試結果,每一種組合每秒都能達上千次的 request。但這先決條件是對象是個純 html 檔,或是一個沒邏輯的純 servlet。如果測試只跑到這個階段,那結果通常只受限於硬體和網路。

  2. container 外,再加掛 http proxy 大概會讓效能掉 10~20% 左右 (我測 nginx),不過還是能維持在 千/秒 這個量級。我想只要參數沒調壞一般不用太擔心這層的 cost。

  3. 如果網頁開始有邏輯,即網頁是由動態 template 產生,這時第一點的 千/秒 這個量級,會降到 百/秒 這個量級。端看用的 component 有多複雜 (例如 jsp tag 或是 freemarker macro 之類的),越複雜的頁面效能越差。一般網頁東西都塞滿多的,所以都會降 10 倍左右。如果採用的網頁是用 jsp 寫的,那麼測 server 效能就要多測這一項。如果不是 jsp 那大概換什麼 server 結果都差不多。要小心有一些 template 效能很爛 (例如 thymeleaf,會掉到 十/秒 以下的量級)。

  4. 再下來是資料庫,測試中如果包含了資料庫存取,會發現效能會掉到 十/秒 這個量級了。而資料庫存取複雜的,掉到 個/秒 以下也很常見。

經過上面的實測,結論跟大家的經驗一樣,真正效能殺手是資料庫。如果資料庫解決了 (比方說加 cache),就是直接快 10 倍以上。而這時候,下一個調整的目標會落在 template 上,不過 template 很難提升的 (複雜的網頁就是這麼複雜...)。等到克服了這關,效能又上升了 10 倍。而這時才有機會進入最後一層,即 container 的 nio/bio 之類的選擇和調整。也就是你這篇測試關心的題目。

由於前兩層的瓶頸太高,我現在只在意它們的調整,而不會在意選什麼牌的 server,我建議選自己熟悉的就好。而 nio/bio/apr,也都用預設的就好,頂多 bio 的 connection 上限數調高一點就是。如果未來有幸,能遇到需要 千/秒 這個量級以上的服務,那時候我會跳過 servlet container,直接用 netty 去處理,去做最細部的最佳化,以求得最高的效能。

題外話,我現在都改用 wrk1 ,而不是 ab,wrk 這個 client 比 ab 更快,可以壓搾更多 server 效能出來。

howie 積分 1

剛剛換用wrk測試Java Servlet Container Performance Tesing(2)1

增加一個測試(後端有拖慢效能的Task時),結果又不一樣了....@@

IngramChen 積分 2 編輯於

我之前有做的 測試結果1 。跟你測的東西不一樣,但有點關聯。可以參考看看。

測試機和web 都是A2的機器,wrk 的測試方法真的很操系統 load average: 32.06, 16.47, 12.81

這是 server load 嗎? server load 超過 CPU core 數時,測試沒有意義喔 (超出硬體極限 )

tomcat 的記憶體是慢慢往上吃,jetty 是頻繁的GC,但是平均記憶體吃的比較少

?我看你的圖兩台在接受 request 時圖都差不多啊

tomcat 用完Thread 就全部還回去,但是Jetty 卻不會!?

兩個 container 都有各自的參數可調,Thread 終究會回到 min value。只是回收時間不一而已,

但是數據結果卻不一樣了tomcat-apr 的數據比jetty9-nio的數據好多了

無法解釋... 不曉得你測試前有無暖機?測了幾輪後才取得穩定值?

howie 積分 1 編輯於

其實我就是參考(微調)你之前的測試~XD 只是AB合再一台,會拖慢速度的是C

恩恩看到這個Server load 的確太誇張了,我回去再修改一下測試數據~Orz..

我測試前都有暖機,只是用wrk 不知道應該測多久才準~ 另外想請問一下wrk connection 與thread 之間的關係? 是thread x connection 還是 connection/thread ? 要怎樣換算成concurrent user?

IngramChen 積分 1

說真的我也不曉得怎麼樣的 threadxconnection 比較像真實的環境。通常我兩個比例互相修改,能得到的最大效率就開始比較測試的結果了。

qrtt1 積分 0

你 PO 錯版xd

howie 積分 0

阿阿po錯地方了....>////<

koji 積分 0 編輯於

之後會先做刪除 0rz...

howie 積分 0

可以搬移嗎?XD

kaif 積分 0

你的github repos裡沒東西呀xd

howie 積分 0

我傳錯東西剛剛砍掉重放~XD