性能測試並發對比(JMeter,Locust和Gatling篇)


並發

說到並發,我們首先想到的就是服務端系統的並發模型,現在常見的並發模型有多線程模型,事件循環模型,Actor 模型和 CSP 模型等不同的模型。為了能測試到這樣的服務器系統的並發能力,性能測試工具也需要支持與之相應的並發包能力。而充分了解性能測試工具的並發模型,可以更好地幫助你選擇適合自己的性能測試工具。其中 JMeter,Locust 和 Gatling 就選擇了三種不同的並發模型,這個應該是和開發者當時的技術背景,業務需求,資源情況等密切相關的。所以沒有必要去探究當時作者為什么要選擇這個模型,但是可以嘗試去理解這些不同模型的特點,從而選擇到適合自己的模型。其中 JMeter 使用的是多線程模型,Locust 使用的是事件循環模型,而 Gatling 使用的是 Actor 模型,最近又有一個后起之秀 K6,它則使用的是 CSP 模型。其次並行和並發是完全不同的兩個概念,簡單說並行是操作系統和 CPU 的一種能力,而並發是應用程序的一種能力。如果性能測試工具支持多線程或者多進程,並且運行的操作系統支持並行以及 CPU 是多核的情況下,其發包能力能大大增強。但是這樣的條件比較苛刻,所以這里就不做深入探討。

JMeter

JMeter 是三個工具中最早發布的性能測試工具,並且由於早期性能測試的需求並不十分復雜,並且對於並發性能的要求也不是很高,所以 JMeter 使用了當時最為成熟的並發模型-多線程模型(Threads)和 Java 語言來開發。這種模型的特點就是重度依賴於開發語言和操作系統對於多線程的支持,如果語言和操作系統層面對於多線程的支持不好,就會導致這種並發模型出現問題。其次多線程切換的時候資源消耗比較多,所以和另外兩個輕量級的並發模型相比,在同等資源的情況下,產生的有效並發數量會小很多。最后多線程也相對容易產生錯誤,比如死鎖,共享數據錯亂等,所以 JMeter 使用界面的方式也是盡可能地減少了由於二次開發導致的這類錯誤。其優勢就是可以在操作系統支持的情況下可以使用到多核處理器的多個核。但是隨着性能測試需求的增多,JMeter 為了能滿足更多的需求,也在不停地更新其功能和增加其插件,比如支持分布式來解決性能不足的問題,支持更多的擴展腳本來滿足自定義需求等等。但是其基礎並發模型一直沿用多線程模型,導致其並發性能沒有辦法進一步提升,估計在未來可以預見的很長一段時間之內是不會改變的。

 

 

Locust

Locust 為了避免多線程存在的各種問題,它選擇了消息循環模型(EventLoop)和 Python 語言來開發。EventLoop 模型最大的優勢就是在一個線程里面可以完成大量的並發,從而避免了多線程帶來的各種問題。與此同時它帶來的問題就是無法同時使用多核處理器的多個核,從而無法充分使用硬件資源。不過可以通過 Locust 提供了分布式的方法來使用多核。其次 Locust 的並發模型里面並發用戶的數據只能配置一個固定值,並且在 Locust 運行的過程中是不能改變的。這個特性與 JMeter 和 Gatling 都不一樣,因為 JMeter 和 Gatling 都是可以運行的過程中改變並發用戶數量的。

 

 

Gatling

Gatling 是三個工具中發布最晚的一款,所以它選擇 Akka(Actor)模型和 Scala 語言來開發。由於 Actor 模型的輕量和高並發性,再加上 Scala 語言基於 JVM,所以 Gatling 的並發模型結合了 JMeter 和 Locust 的優勢,其盡可能地避免了多線程存在的一些問題,並可以充分使用硬件資源:多核。其次 Actor 模型核心是基於消息傳遞的,並且使用每個虛擬用戶基於一個 Actor 就可以做到相對獨立,並通過消息傳遞進行通信。所以它具有和消息循環模型同樣在單線程里面進行高並發的能力。並且它還可以在運行時輕松地動態增加和減少並發虛擬用戶數(Actor)。雖然其並發模型十分優秀,但是需要使用 Scala 語言來進行開發,使得很多測試人員望而卻步,導致 Gatling 的使用量並不是很廣泛。

Actor 並發模型圖

 

 

JMeter,Locust 和 Gatling 使用了三種典型的並發模型,從而決定了其不同的基礎特性。而充分了解這些特性,可以更好地幫助我們選擇適合自己項目的性能測試工具,從而避免一些后期的一些問題。如果不想選擇已有的這些開源測試工具,想自己重新開發,選擇並發模型更是非常重要的一步。雖然很多性能測試初級者,也許並不關心性能測試工具的並發模型,但是隨着深入學習和實踐之后,會遇到各種不同的需求或者問題。為了實現這些需求和解決這些問題,就需要深入了解性能測試工具的各種特點,這其中就包括並發模型。其次,當前大量的服務器軟件也是使用的和性能測試工具相同的並發模型,所以學習並了解這些並發模型,可以讓你進一步了解被測系統的性能模型,從而更好地設計性能測試方案和模型。所以對於高級的性能測試工程師或者性能工程師,並發模型都是一門必不可少的課程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM